怎样解决使用feof()函数时出现的问题?
feof函数
昨天在做一个课程设计时,一个函数的功能是将文件中的数据一条条的读到链表中去。既然不确定有多少条数据,那只能借助feof()函数了,本来文件部分就没学好,也就知道这一个方法。但是在测试的后就发现了它的问题,就是在判断是否到达文件尾的时候,它会多读一次,就导致从文件读出的部分内容是错的。可能在课堂上老师就讲到了,可是我不知道当时在干啥,反正就是不记得。更关键的是我还不知道如何去解决。然后我就毅然决然的去了百度,新浪博客,CSDN博客,博客园,等搜搜搜!最终发现了相同的一段代码,而且网上对这段代码的评价还挺高。
代码如下:
int c; c = fgetc(fp); while(!feof(fp)) { printf("%x\n",c); c = fgetc(fp); }
可是我粘到我的程序里面后发现并没卵用,依旧出错,一气之下重来,自己解决!最终用了个笨方法,但是毕竟解决了!
下面代码是使用此方法的一个函数:
void readWorkerput () //运行前把文件内容读取到电脑内存 { FILE *fp; fp=fopen("worker.txt","rb"); //以只读方式打开当前目录下的.txt if(fp==NULL) { printf("无法打开文件\n"); exit(0); //-------- 终止程序 --------- } int i=0; while(!feof(fp)) { WORK *p=(WORK *)malloc(sizeof(WORK)); fscanf(fp,"%d %s %s %d %s %f %s %ld",&p->Number,p->Name,&p->Sex,&p->Old,p->Edu,&p->Salary,p->Address,&p->Tel); i++; } fclose(fp); FILE *FP; FP=fopen("worker.txt","rb"); //以只读方式打开当前目录下的.txt if(FP==NULL) { printf("无法打开文件\n"); exit(0); //-------- 终止程序 --------- } int b=i-1; int j=1; if(i==1) { fclose(FP); } else { while(!feof(FP)) { WORK *n=(WORK *)malloc(sizeof(WORK)); fscanf(FP,"%d %s %s %d %s %f %s %ld",&n->Number,n->Name,&n->Sex,&n->Old,n->Edu,&n->Salary,n->Address,&n->Tel); //printf("%d %s %s %d %s %f %s %ld\n",n->Number,n->Name,n->Sex,n->Old,n->Edu,n->Salary,n->Address,n->Tel); addworker(n); n=n->next; if(j==b) break; j++; } fclose(FP); //----关闭文件----- } }
可以仔细看看,实在看不懂,我写的整个程序在这 职工信息管理系统 ,打开看看完整的也可以!