我正在尝试从文件中读取一行,我使用line
抓取一行fgets
。然后我尝试使用sscanf
来解析它。有时我会调用sscanf
并发现它返回错误数量的参数。那么我将尝试重新分析相同的line
字符串。有时候它会起作用,有时它不起作用(这使我相信问题不是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 :(得分:1)
简短回答是的,你可以多次sscanf相同的字符串。
您的问题是在字符串中输入“\ n”并不符合您的预期... 它匹配任何空格字符空格,tab,\ r,而不仅仅是\ n。
所以你需要在scanf'ing之后检查行尾。