2 qq 34035545 qq_34035545 于 2016.03.24 23:53 提问

c语言为什么fread读取失败

#include #include #include #define STUDLEN sizeof(student)typedef struct _student{ char name[10]; char sex[5]; float weight; float high; struct _student *next;}student;void Free(student *head); void input(){ student *head=NULL,*p,*ptemp,*wpoint; char name[10],contin[5]; char sex[5]; float weight; float high; FILE *fp=fopen("student.data","ab+"); if(fp==NULL) { printf("打开文件失败\n"); exit(1); } do{ printf("输入学生姓名:"); scanf("%s",name); printf("输入性别:"); scanf("%s",sex); printf("输入体重:"); scanf("%f",&weight); printf("输入身高:"); scanf("%f",&high); p=(student *)malloc(STUDLEN); strcpy(p->name,name); strcpy(p->sex,sex); p->weight=weight; p->high=high; p->next=NULL; ptemp=head; if(head) { while(ptemp->next) ptemp=ptemp->next; ptemp->next=p; } else head=p; printf("继续录入信息?yes or no\n"); scanf("%s",contin); }while(stricmp(contin,"yes")==0); for(wpoint=head;wpoint;wpoint=wpoint->next) if(fwrite(wpoint,STUDLEN,1,fp)!=1) printf("write error\n"); Free(head); fclose(fp); } void Free(student *head){ for(;head;head=head->next) free(head);}void find(){ FILE *fp=fopen("student.data","rb"); char name[10]; student *p; if(fp=NULL) printf("打开文件失败\n"); printf("请输入姓名\n"); scanf("%s",name); while(!feof(fp)) { if(fread(p,STUDLEN,1,fp)!=1) { printf("读取失败\n"); break; } else { if(strcmp(p->name,name)) { printf("姓名:%s\n性别:%s\n身高:%.2fcm\n体重:%.2fkg\n",p->name,p->sex,p->high,p->weight); break; } } } fclose(fp); } void main(){ int menu; void input(); void find(); printf("请选择:\n"); do { printf("1.输入学生信息\n"); printf("2.查询学生信息\n"); printf("0.退出系统\n"); scanf("%d",&menu); switch(menu) { case 1:input();break; case 2:find();break; case 0:break; default:printf("error\n");break; } }while(menu!=0);}

3个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.25 08:55
已采纳

fopen,fclose系列函数似乎不是线程安全的,fclose以后立刻fopen确实有点bug
建议楼主注释掉前半部分,直接从读文件那里运行,看看先读取文件行不行,如果可以的话,说明造成这种情况的原因是fclose后马上又对同一个文件
fopen是有点BUG的

caozhy
caozhy   Ds   Rxr 2016.03.25 00:18

student.data这个文件是否存在,特别是如果你是windows系统,你是否选择了隐藏文件扩展名,你的文件是不是student.data.txt
有没有别的程序锁定这个文件

qq_34035545
qq_34035545 回复caozhy: 文件存在 能存数据进去 就是不能读出来啊
一年多之前 回复
wangyaninglm
wangyaninglm   Ds   Rxr 2016.03.25 00:15

也许是文件路径的问题 ,题主应该把代码的错误信息发上来

qq_34035545
qq_34035545 回复shiter: 编译能通过 再读取数据的时候fread返还0吧
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!