2

我正在尝试从文件中读取一行,我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在同一个字符串上多次调用吗?我叫错了吗?或者我应该在我的代码中的其他地方寻找问题吗?

4

1 回答 1

1

简短回答是的,您可以多次扫描相同的字符串。

您的问题是在您的字符串中包含“\n”并不符合您的预期......它匹配任何空白字符空间、制表符、\r,而不仅仅是\n。

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

于 2013-02-18T16:27:13.047 回答