我想從文件中讀取一行,我搶用fgets
線line
。然後我嘗試使用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
多次在同一個字符串?我說錯了嗎?或者我應該在代碼的其他地方查找問題?
是沒有問題的,它覆蓋你是什麼意思「沒有做什麼,我希望!」不串 – 2013-02-18 15:21:26
的價值?你期望什麼,它有什麼作用?是的,你可以像往常一樣在同一個字符串上調用'sscanf'。 – 2013-02-18 15:24:01
其他評論者是正確的。多次調用sscanf是沒有問題的。但你可以只調用一次並檢查i的值。在碰到匹配錯誤之前,sscanf會嘗試匹配儘可能多的轉換。同時檢查我對EOF,如果沒有匹配或匹配錯誤到達字符串的末尾,則返回EOF。閱讀手冊頁:http://linux.die.net/man/3/sscanf – 2013-02-18 15:36:55