为什么我的fscanf不工作?

时间:2013-03-18 18:05:02

标签: c++

出于某种原因,我不明白为什么,我的fscanf代码不起作用。我的朋友有相同的任务和相同的代码为他工作。

ISBNPrefix::ISBNPrefix(const char * filename) {
    FILE * prefixFile = NULL;

    if (filename != NULL)
    prefixFile = fopen(filename, "r");
}

bool ISBNPrefix::isRegistered (int area) const {
    int areaDigit = 0;
    bool check = false;

    //rewind(prefixFile);

    while(fscanf(prefixFile, "%d %*[^ ] %*[^\n]", &areaDigit) != EOF) {
        if (areaDigit == area) {
            check = true;
            break;
        }
    }

    return check;
}

它没有fscanf正确,它应该在某些测试中返回true但它返回false;我不认为它扫描正常。任何人都可以看到什么是错的吗?

我的文本文件的前四行是:

0 00 19
0 200 699
0 7000 8499
0 85000 89999

1 个答案:

答案 0 :(得分:2)

这一行:

while(fscanf(prefixFile, "%d %*[^ ] %*[^\n]", &areaDigit) != EOF) {

  • 将数字读入areaDigit,然后
  • 跳过输入中的空格,然后
  • 读取一个或多个非空格字符,然后
  • 再次跳过空白,然后
  • 读取并丢弃直到下一个换行符的所有字符。

在读取areaDigit的数字之前,它是否应该到达文件的末尾,循环将结束。例如,输入如:

123 456 789
555 xxx yyy

它会以areaDigit循环两次,分别为123和555

输入如下:

1 2 3 4 5 6 7 8 9
a b c d e f g h i

它将读取1,然后进入无限循环,无法读取第二行(始终为areaDigit == 1。)

输入如下:

1
2
3
4
5
6
7

它将使用areaDigit循环3次,分别为1,4和7