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

今天刚做完一个小的职工管理系统,碰到了一个 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() 函数并不能读取到数据,就会出现乱码;

读者们以后碰到问题时可以对问题进行一下简化,再来处理。



猜你喜欢

转载自blog.csdn.net/qq_41413835/article/details/80621360