qq_34035545 2016-03-24 15:53 采纳率: 100%
浏览 2607
已采纳

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条回答

  • 小灸舞 2016-03-25 00:55
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥20 MATLAB绘制两隐函数曲面的交线
  • ¥15 求TYPCE母转母转接头24PIN线路板图
  • ¥100 国外网络搭建,有偿交流
  • ¥15 高价求中通快递查询接口