使用fscanf()使用feof()

Kra*_*ken 3 c scanf feof

这是我的代码.

#include<stdio.h>
void main(){
    FILE *fp;
    int a,b;
    fp=fopen("hello.txt","r");
    while(!feof(fp)){
      fscanf(fp,"%d %d",&a,&b);
      printf("%d %d\n",a,b);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的hello.txt是

1   2
3   4
Run Code Online (Sandbox Code Playgroud)

我的输出是

1   2
3   4
4   4
Run Code Online (Sandbox Code Playgroud)

为什么我的最后一行被打印两次.还没有fp达到EOF?

此外,stackoverflow中的标记说明Usually, when it is used, the code using it is wrong. 是什么意思?

谢谢.

Ker*_* SB 6

如果不立即检查结果,就不能执行输入操作!

以下应该有效:

while (fscanf(fp,"%d %d",&a,&b) == 2)
{
    printf("%d %d\n",a,b);
}
Run Code Online (Sandbox Code Playgroud)

这将在第一次转换失败或文件结束时停止.或者,您可以区分转换失败(跳过错误的行)和文件结束; 请参阅文档fscanf.