如何通过fscanf找到EOF?

kar*_*hik 17 c scanf

我在fscanf()的帮助下通过文件读取矩阵.我怎样才能找到EOF?即使我试图在arr []中捕获的每个字符串后找到EOF,那么我也无法找到它.

在计数的帮助下,我正在读取输入文件

-12 23 3

1 2 4

int main()
{
    char arr[10],len;
    int count=0;

    FILE *input= fopen("input.txt", "r");

    while(count!=7)
    {   
           fscanf(input,"%s",arr);
          //storing the value of arr in some array.
                   len=strlen(arr);
           count++;

           if(arr[len+1]==EOF)
           printf("\ni caught it\n");//here we have to exit.
    }
return 0;
}
Run Code Online (Sandbox Code Playgroud)

而不是计数我想通过EOF退出循环.怎么解决?

pre*_*lic 17

fscanf - "成功时,该函数返回成功读取的项目数.此数量可以匹配预期的读数数量,或者在匹配失败的情况下减少 - 甚至为零.如果在任何数据之前输入失败,则成功阅读,退还EOF."

因此,您不必像现在这样对返回值执行任何操作,而是可以检查它是否存在== EOF.

您应该在通话时检查EOF fscanf,而不是检查阵列插槽是否有EOF.

  • 你什么意思?这个帖子中的很多人都演示了当fscanf返回EOF时如何停止.下面的答案,上面的评论......类似:`while(fscanf(输入,"%s",arr)!= EOF){...}`.当到达文件的末尾时,fscanf将返回EOF,while循环将捕获,并且不会再读取任何内容.实际上,您可以使用它来计算`count`变量. (3认同)
  • while(fscanf(输入,"%s",arr)!= EOF){fscanf(输入,"%s",arr); LEN = strlen的(ARR); 的printf( "%S\t" 的,ARR); } (2认同)

per*_*ain 8

while (fscanf(input,"%s",arr) != EOF && count!=7) {
  len=strlen(arr); 
  count++; 
}
Run Code Online (Sandbox Code Playgroud)

  • @aakasha:- 把它删掉即可;) (2认同)