我的!feof(fp)为什么读不到文件尾?

bleempan 2001-05-30 11:29:00
void load(void)
{
FILE *fp;

if((fp=fopen("abc,txt","rb+"))==NULL) {
printf("cannot open file\n");
getch();
return;
}

while(head) {
p1=head->next;
free(head);
head=p1;
}

head=p1=NULL;

while(!feof(fp)) {
p1=(struct student *)malloc(sizeof(struct student ));
if(!p1) {
printf("out of memery\n");
return;
}

if(fread(p1,sizeof(struct student),1,fp)!=1) {
printf("file read error\n");
free(p1);
getch();
return;
}

p2->next=p1;
p2=p1;
if(n==0)
head=p1;
}
p2->next=NULL;
printf("\nload successful\n");
getch();
fclose(fp);
}

假设我的文件里有二项数据,循环二次之后fp应该是到了文件尾,可就是退不出循环。这是怎么回事?
我把fread条件判断去掉,程序循环三次后退出了,为什么会多读了一项?应该怎样改才行。
...全文
311 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuto 2001-05-31
  • 打赏
  • 举报
回复
应该是三次,第三次其实没读到,因为前两次读完正好读了所有的数据,但feof只有到你读了超出文件的数据时才会变成true.
前一个问题你没说清楚,你跟踪了?怎么知道没退出?到了peintf("file read error")一句了么?
blre 2001-05-31
  • 打赏
  • 举报
回复
第三次的结果是有效的吗?
也可以使用fread的返回值判断

69,396

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧