feof() 函数判断不准确的问题

大家在读文件时应该碰到过这样的问题,while(!feof(fp)) 函数在读文件时会多循环一次,导致 fscanf() 函数多读了一次文件。

所以也就在输出的时候会产生一些乱码。

可以看看下面的代码:

#include<stdio.h>
int main(void) { FILE *fp; char str0[10],str1[10]; fp=fopen("C:\\Users\\Public\\Documents\\data1.txt","r"); while(!feof(fp)) { fscanf(fp,"%s %s",str0,str1); printf("%s\n%s\n",str0,str1); fgetc(fp); } return 0; }

文档里的内容如下:

运行后可以看到:

循环确实是多循环了一次。

 

此时调整一下代码:

#include<stdio.h>
int main(void) { FILE *fp; char str0[10],str1[10]; fp=fopen("C:\\Users\\Public\\Documents\\data1.txt","r"); while(!feof(fp)) { fscanf(fp,"%s %s\n",str0,str1); printf("%s\n%s\n",str0,str1); fgetc(fp); } return 0; }

看似没有什么变化是不是?

其实是在这里改了一下: fscanf(fp,"%s %s\n",str0,str1);

我们来看看运行结果:

好了,问题解决了。

posted @ 2018-07-10 19:13  M-Anonymous  阅读(1463)  评论(0编辑  收藏  举报