C语言中的feof函数

fq=(fopen("date.txt","r"));for(i=0;!feof(fq);i++)fscanf(fq,"%s%f%f\n",day[i].date,&da... fq=(fopen("date.txt","r"));
for(i=0;!feof(fq);i++)
fscanf(fq,"%s %f %f\n",day[i].date,&day[i].boa,&day[i].mis);

我这个文件data.txt开始是空的,但是读入的时候feof第一次循环还是做了,不明白,feof不是到文件末尾就停了吗?而且,当data.txt文件中有一次的保存结果的时候,循环还是只做一次,这是什么问题,求解?
展开
 我来答
巨之说
推荐于2017-11-25 · 大学计算机老师,专注于程序设计教学。
巨之说
采纳数:88 获赞数:335

向TA提问 私信TA
展开全部
即使文件是空的,也要再读一次,feof函数值才会变为真。
因为只有读出所有的数据之后,再读一次,函数feof(fp)的返回值才为真。(请见《C语言好程序设计—从入门到进阶》,人民邮电出版社,2011。)
示例:
#include<stdio.h>
#include<stdlib.h>
main()
{
FILE *fp;
int a;
if((fp=fopen("c:\\number.txt","r"))==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
fscanf(fp,"%d",&a);
while(!feof(fp)) /*等价于while(feof(fp)==0)*/
{
printf("%d ",a);
fscanf(fp,"%d",&a);
}
fclose(fp);
}
更多追问追答
追问
如果按你的说法,那有一条数据,就按我的那个循环来讲,循环应该做两次,但我测试的结果为1次,解释不通啊
追答
请看以下程序,应该这样读出。若用你原来的方法,文件为空时,会输出乱字符。
还有你的fscanf中多了一个\n。
#include
#include
main()
{
FILE *fq;
int i;
char date[80]; //为了简单,去掉了结构体
float boa,mis;
fq=(fopen("c:\\date.txt","r"));
fscanf(fq,"%s",date);
for(i=0;!feof(fq);i++)
{fscanf(fq,"%f%f",&boa,&mis);
printf("%s %f %f\n",date,boa,mis);
fscanf(fq,"%s",date);
}
fclose(fq);
}
刚才那本书的名字应该是《C语言程序设计—从入门到进阶》,人民邮电出版社,2011。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式