今天刚做完一个小的职工管理系统,碰到了一个 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);
再运行时会发现:
多循环一次的问题解决了。
这里对我碰到的问题简化了一下。
因为如果多循环一次,在文件中,链表末尾 fscanf() 函数并不能读取到数据,就会出现乱码;
读者们以后碰到问题时可以对问题进行一下简化,再来处理。