1

例如,我有一个带有数字行的文本文件

 5  6  3 2 10  4 6 
18 49 40 9 17 40 0

当我读入文件时,它不会在文件末尾停止。我的循环读取代码如下 -

while ((fscanf(spFile, "%d", &scores[i][j])) == 1 && spFile != EOF) {
        printf("%d ", scores[i][j]);

        if(j == 8) {
            i++;
            j = 0;
            printf("\n");
        } else {
            j++;
        }
        numOfStudents++;
    }

最大行数是 50(所以一个 50 的数组(必须将它作为数组而不是指针))并且我有 numOfStudents 来计算行数,当它完成时它说 50,而实际上它只有 2 个。

谢谢!

4

3 回答 3

2

fscanf() 将返回 0 或 EOF。

您还可以使用“feof()”函数。

文件指针变量 spFile永远不会等于 EOF。“EOF”是由 C 运行时管理的状态,它不是文件指针本身。

于 2012-10-06T21:05:03.857 回答
0

循环的条件应该是这样的:

while (fscanf(spFile, "%d", &scores[i][j]) > 0){
   /* Do Stuff */
}

或者,为了避免无法解析输入的情况:

while (!feof(spFile) && fscanf(spFile, "%d", &scores[i][j]) > 0){
   /* Do Stuff */
}
于 2012-10-06T21:04:00.450 回答
0

尝试检查返回的字节数fscanf()是否大于0

while(fscanf(...) > 0) {
/* do something */
}

错误检查是这样的:

while(1) {
  fscanf( .. );

  if(feof(fp)) {
    if(ferror(fp)) {
        /* stoped because an error check out errno */
    }

   break;
  }
于 2012-10-06T21:12:33.860 回答