您的位置:首页 > Web前端

关于feof()多读取一次的问题(还未解决)

2016-04-25 00:00 316 查看
在编写C语言学生信息管理系统时,想编写一个读取文本的小功能时意外遇到一个小问题。

void query()//读取文件
{
FILE *P=fopen("E:\\practise\\a.txt","r");//以读的方式打开文件
char s[1024]={0};//分配一个空间
while(!feof(P))
{
printf("%s",s);//打印出每行数据
fgets(s,sizeof(s),P);//读取下一行
}
fclose(P);
}

printf与fgets调换顺序出现不同的结果

原因

在读完文件的最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。这样就多执行了一次。

现象

feof会无缘无故多执行一次,就是打印到最底层,最后一组数据,打印完没有及时结束,重新打印了一遍。上文已经修改

百度:

while(条件),当条件是真时跳出循环,先判断后执行
对于feof()这个函数, 它是先读再判断是否到文件尾, 也就是说在它之前一定要读一次才能做出判断
`while(!feof(P))//这是对的
{
printf("%s",s);//打印出每行数据
fgets(s,sizeof(s),P);//读取下一行
}`
`while(!feof(P))//这是错的
{
fgets(s,sizeof(s),P);//读取下一行
printf("%s",s);//打印出每行数据
}`
*/

参考以下资料

http://blog.csdn.net/daiyutage/article/details/8540932
http://blog.sina.com.cn/s/blog_705a5ff00101ab5d.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: