C语言的fread和fwrite函数剖析,fread后fwrite,内容并没有得到修改
while(fread(adder,sizeof(structstudent),1,fp)>0){if(adder[0].num==a){printf("请输入学号:\n...
while(fread(adder,sizeof(struct student),1,fp)>0)
{
if(adder[0].num==a)
{
printf("请输入学号:\n");
scanf("%d",&adder[0].num);
printf("请输入姓名:\n");
scanf("%s",&adder[0].name);
printf("请输入成绩:\n");
scanf("%f",&adder[0].grade);
fwrite(adder,sizeof(struct student),1,fp);
fclose(fp);
}
}
这是一个我写的修改条目的,我是这么想的,每次去文件读一次一条项目,然后判断是不是我想要修改的那条,然后修改之后写回文件,结果是,文件没有得到修改,原封不动(听说fread之后文件指针会指到下一个sizeof(struct student)长度的头地址,也罢。但是下一条还是没变),求高手指导 展开
{
if(adder[0].num==a)
{
printf("请输入学号:\n");
scanf("%d",&adder[0].num);
printf("请输入姓名:\n");
scanf("%s",&adder[0].name);
printf("请输入成绩:\n");
scanf("%f",&adder[0].grade);
fwrite(adder,sizeof(struct student),1,fp);
fclose(fp);
}
}
这是一个我写的修改条目的,我是这么想的,每次去文件读一次一条项目,然后判断是不是我想要修改的那条,然后修改之后写回文件,结果是,文件没有得到修改,原封不动(听说fread之后文件指针会指到下一个sizeof(struct student)长度的头地址,也罢。但是下一条还是没变),求高手指导 展开
展开全部
你好,你这个自定义函数的主要问题是:读取一次就关闭文件了,如果需要再次读取就需要再次打开,但说实话,不主张这种用法,我们一般的用法是全部读取文件的内容但结构体链表或结构体数组中,然后以此判断结构体链表或结构体数组的adder[0].num,判断完之后再次写入文件,这样才可以,你的代码只能判断文件的第一行
-物联网校企联盟技术部
-物联网校企联盟技术部
更多追问追答
追问
读取一次就关闭文件了?我的关闭是的if里啊,而且fread之后文件指针会指到下一个sizeof(struct student)长度的头地址吧。(那个我有这个全部的资料源码,上面的是我自己写的,给的资料里的是那种每次都全部读进来,对数据处理后再全部写回去)但是我想问我的这个为什么不行,求实质
追答
嗯,那里判断之后关闭文件了,但还没有退出while循环都嘛,while还在继续,如果还不行点我的名字吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询