2013-02-18 25 views
1

我想從文件中讀取一行,我搶用fgetsline。然後我嘗試使用sscanf來解析它。有時我會打電話給sscanf,並找出它返回錯誤的參數數目。那麼我會嘗試重新分析相同的line字符串。有時它是有效的,有時它不會(這導致我相信問題不是sscanf,而是我的代碼中的其他內容)。下面是我的意思的例子:我可以在同一個字符串上調用sscanf多重時間嗎?

i = sscanf(line,"%d/%d/%d %d/%d/%d %d/%d/%d %d/%d/%d\n", &faceV1, &faceUV1, &faceN1, &faceV2, &faceUV2, &faceN2, &faceV3, &faceUV3, &faceN3, 
       &faceV4, &faceUV4, &faceN4); 

if(i == 12) { 
    //We gotta quad... 
    printf("Model.c: Quads not supported\n"); 
} else if(sscanf(line,"%d/%d/%d %d/%d/%d %d/%d/%d\n", &faceV1, &faceUV1, &faceN1, &faceV2, &faceUV2, &faceN2, &faceV3, &faceUV3, &faceN3) == 9) { 
    //Doesn't do what I expect! 
    ... 

但是如果我擺脫i = sscanf...i == 12檢查並直行到if(sscanf(line,"%d/%d/%d %d/%d/%d %d/%d/%d\n", &faceV1, &faceUV1, &faceN1, &faceV2, &faceUV2, &faceN2, &faceV3, &faceUV3, &faceN3) == 9)預期它會奏效。

所以回到這個問題的標題,我可以叫sccanf多次在同一個字符串?我說錯了嗎?或者我應該在代碼的其他地方查找問題?

+0

是沒有問題的,它覆蓋你是什麼意思「沒有做什麼,我希望!」不串 – 2013-02-18 15:21:26

+1

的價值?你期望什麼,它有什麼作用?是的,你可以像往常一樣在同一個字符串上調用'sscanf'。 – 2013-02-18 15:24:01

+0

其他評論者是正確的。多次調用sscanf是沒有問題的。但你可以只調用一次並檢查i的值。在碰到匹配錯誤之前,sscanf會嘗試匹配儘可能多的轉換。同時檢查我對EOF,如果沒有匹配或匹配錯誤到達字符串的末尾,則返回EOF。閱讀手冊頁:http://linux.die.net/man/3/sscanf – 2013-02-18 15:36:55

回答

1

簡短的回答是可以的sscanf相同的字符串多次。

你的問題是,你的字符串中有「\ n」沒有做你期望的... 它匹配任何空白字符空間,標籤,\ r,而不僅僅是\ n。

所以你需要檢查scanf'ing後結束線。

相關問題