我可以在同一个字符串上多次调用scanf吗?

时间:2013-02-18 15:20:24

标签: c scanf

我正在尝试从文件中读取一行,我使用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吗?我说错了吗?或者我应该在代码的其他地方查找问题?

1 个答案:

答案 0 :(得分:1)

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

您的问题是在字符串中输入“\ n”并不符合您的预期... 它匹配任何空格字符空格,tab,\ r,而不仅仅是\ n。

所以你需要在scanf'ing之后检查行尾。