c语言为什么fread读取失败

问题描述

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 non"); scanf("%s",contin); }while(stricmp(contin,"yes")==0); for(wpoint=head;wpoint;wpoint=wpoint->next) if(fwrite(wpoint,STUDLEN,1,fp)!=1) printf("write errorn"); 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("姓名:%sn性别:%sn身高:%.2fcmn体重:%.2fkgn",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("errorn");break; } }while(menu!=0);}

解决方案

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

解决方案二:

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

解决方案三:

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

时间: 2024-10-22 19:09:38

c语言为什么fread读取失败的相关文章

文件读取-c语言 从txt读取多个浮点数 并输出到另一txt

问题描述 c语言 从txt读取多个浮点数 并输出到另一txt c语言从txt读取一百万个浮点数 txt内容 -2.6225058083945892e+114 5.5865472375948137e+258 有一百万个这样的浮点数 怎么能以最快速度读完,并输出到另一个txt? 怎么能快速的对这些数排序?推荐一种算法 解决方案 不管怎么说,3秒钟来不及显示.显示器每秒钟刷新60帧,每一帧显示80行数据,你算算3秒钟能显示多少数据? 排序的话,你用快速排序就可以了,全部读取到内存,也就是几十兆. 解决

c语言以二进制读取图片问题

问题描述 c语言以二进制读取图片问题 小弟新手刚学数字图像处理,现在需要做一个模板卷积 程序编完了 但是对图片的处理总是不对 我把图片不做模板卷积只是读进去在存出来,发现图片已经变化了. 但是查了很久fread函数和fwrite函数,不知道哪里错了 大神们求拯救帮忙看看 程序很简单 define的想法就是用一维数组表示二维数组 #include using namespace std; #define Twoto1(i,j,w) i*w+j void createimage(unsigned c

91-为什么fread读取文件是读取大部分还有一小部分没读取,怎么回事?

问题描述 为什么fread读取文件是读取大部分还有一小部分没读取,怎么回事? 求大神帮助. 解决方案 size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ; 实际读取的长度是 size*count,看看你的url长度是多少? 解决方案二: size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ; 实际读取的长度是 size*

c语言关于fread问题?~~

问题描述 c语言关于fread问题?~~ 将文件"125.txt"中15名同学的姓名.成绩读入到结构体数组中,输出平均成绩和最高成绩的同学(要求保留2位小数).要求定义如下结构体类型: struct student { char name[20]; float mathScore; }; 数据文件:程序目录下 期待输出 平均分:67.03? 最高分:luyu 80.66? 实际输出 #include<stdio.h> struct student { char name[2

fread 读取一部分为乱码是怎么回事

问题描述 fread 读取一部分为乱码是怎么回事 #include#includeusing namespace std;struct student{ int id; int number; char name[40] date[20];};int main(){ struct student L; FILE *fp; fp=fopen(""in.txt""r""); fread(&Lsizeof(struct student)1fp)

c语言-C语言getchar不读取EOF问题

问题描述 C语言getchar不读取EOF问题 各位前辈,我的问题是,当我调试下面的c程序的时候,有一个不懂的地方在于: 右边输入了I am a student^Z(ctrl+z),但是当whilie循环中的c=getchar()在读完了c=t(最后一个字符t)之后,getchar就不继续读取了,即getchar不继续读取^Z了,也即while循环不退出,这是怎么回事.请各位大神解答,谢谢.. #include #include int getline(char *s, char lim) {

豆瓣-关于C语言按行读取文件,读取其中数字,挨个转换成doube类型,存入数组

问题描述 关于C语言按行读取文件,读取其中数字,挨个转换成doube类型,存入数组 int main() { FILE *fp; char buffer[50]; char filename[50]; int bufferLen; int i; int j = 0; char c; double c_number[50]; printf("Input file name: "); scanf("%s", filename); if((fp = fopen(filen

linux包编译失败-Linux安装R语言,报编译失败!

问题描述 Linux安装R语言,报编译失败! Error:compilation failed for package 'Rserve' 说包编译失败! 貌似说版本问题,于是换了几个版本还是不行! R六个包! 第一个包是tar.gz解压出来进入目录./configure make make install的! 之后的包都是 R CMD INSTALLL XXXX.tar.gz来执行命令的! 同事在第一台上装成功了,第二台我装就没有成功,两台Linux系统版本也不一样!

fread读取二进制文件长度的问题

问题描述 fread读取二进制文件长度的问题 int widthheigth;FILE *fpImg;fpImg = fopen( fullNamerb"");if( fpImg==0 ){ AfxMessageBox( ""Cannot open the image file"" MB_OK 0 ); return;} fread( &widthsizeof(int) 1 fpImg);fread( &height sizeof