#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);}
关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率

首页/
已采纳
c语言为什么fread读取失败
收起
- 写回答
- 好问题 1 提建议
- 关注问题
微信扫一扫
点击复制链接分享
- 邀请回答
- 编辑 收藏 删除 结题
- 收藏 举报
3条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
小灸舞 2016-03-24 16:55关注fopen,fclose系列函数似乎不是线程安全的,fclose以后立刻fopen确实有点bug
建议楼主注释掉前半部分,直接从读文件那里运行,看看先读取文件行不行,如果可以的话,说明造成这种情况的原因是fclose后马上又对同一个文件
fopen是有点BUG的本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 3无用举报微信扫一扫
点击复制链接分享
编辑预览轻敲空格完成输入- 显示为
- 卡片
- 标题
- 链接
评论按下Enter换行,Ctrl+Enter发表内容
编辑
预览

轻敲空格完成输入
- 显示为
- 卡片
- 标题
- 链接
报告相同问题?
提交
- 2023-03-03 04:23回答 2 已采纳 void outputstu(int index){ for(int i=0;i<index;i++){ printf("%d %s %lf",stu[index].i
- 2023-02-11 06:40回答 2 已采纳 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7697611我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:【C 语言】文件操作 ( f
- 2022-04-04 14:38回答 2 已采纳 你的文件是以什么方式写入的呢?你这读取的时候直接按结构体读取的 ,写入文件的时候需要用wb写入,读取的时候用rb读取,否则可能出现读取不完全的情况。
- 2021-05-19 12:34weixin_39790738的博客 函数式编程1、C语言中:fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。函数原型:size_t fread ( void ...
- 2021-07-30 02:55回答 2 已采纳 你用fprintf写文件,读文件就要用fscanf读,fread在读取的时候,会出现字节序颠倒的问题,也就是说,fread在读取数据的时候,是按照低位在前,高位在后的字节顺序读取数据,而且,读取的数据
- 2023-04-02 02:40回答 2 已采纳 这是因为你定义的数组的原因,不要用数组!用malloc根据需要申请一段内存空间,再把数组读到这段内存空间中!
- 2017-08-29 22:03回答 1 已采纳 fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。 函数原型 size_t fre
- 2021-05-20 17:32深圳余先生的博客 fread是用来读取文件的函数,其形式为size_t fread ( void *buffer, size_t size, size_t count, FILE *file) ;功能为从文件指针file中,每次读取size长度数据,读取count次,并将结果存到buffer中。其出错的可能...
- 2021-06-17 12:19回答 2 已采纳 你写到文件就不会乱码,乱码是终端解析编码出错导致
- 2022-10-08 11:53回答 4 已采纳 下面程序是读入你输出的文本文件,写入相应的二进制文件 #include <stdio.h> #include <stdlib.h> #include <string.h&
- 2022-03-30 13:10回答 2 已采纳 int l = strlen(data)这是错误的。strlen遇到'\0'就计算结束了。它只用来计算字符串长度。fread的返回值就是数据长度,所以改成int l = fread(data, siz
- 2022-08-29 17:53小自行车155的博客 c语言:fopen参数中的b的作用
- 2021-05-22 08:44电影魔鬼-教程王的博客 参 数buffer用于接收数据的内存地址size要读写的字节数,单位是字节count要进行读写多少个size字节的数据项,每个元素是size字节.stream输入流返回值实际读取的元素个数.如果返回值与count不相同,则可能文件结尾或发....
- 2021-05-19 12:34weixin_30220177的博客 源代码:/****************************************************@版权:未经作者授权,禁止转载和用于商业用途@官网:www.nilekeji.com@作者:酷乐Happy@用途:个人学习(原作者不受限制)@类型:C语言***************...
- 2021-05-19 12:34weixin_39747293的博客 feof这个是判断fread是否越界读取了,读完到文件结尾他还是返回0的,之后再读取的时候才返回1。我改成了:void print_putout() {int i = 0, n;FILE *fp;BOOK *p1;fp = fopen("list。bok", "rb");print_list_menu();...
- 2023-11-10 02:03爱喝水的泡泡的博客 /fread函数从stream所标示的文件中读取数据,一块是size个字节,共nmemb块,存放到ptr指向的内存里。// 读取五个字节,有四块,从fp中读取,将读取到的内容放到buf中。// 使用fread函数读取文件内容。
- 2022-04-25 15:34C语言提供了一系列的文件操作函数,如`fopen`、`fread`和`fclose`,它们允许程序员打开、读取和关闭文件。通过`fread`函数,我们可以逐字节地读取MIDI文件的二进制内容。 接下来,我们需要解析文件头,确定文件格式...
- 没有解决我的问题, 去提问
联系我们(工作时间:8:30-22:00)
400-660-0108kefu@csdn.net在线客服
- 京ICP备19004658号
- 经营性网站备案信息
公安备案号11010502030143
- 营业执照
- 北京互联网违法和不良信息举报中心
- 家长监护
- 中国互联网举报中心
- 网络110报警服务
- Chrome商店下载
- 账号管理规范
- 版权与免责声明
- 版权申诉
- 出版物许可证
- ©1999-2025北京创新乐知网络技术有限公司