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)长度的头地址,也罢。但是下一条还是没变),求高手指导
展开
 我来答
冰是沉默的水3
2013-03-26 · TA获得超过909个赞
知道小有建树答主
回答量:473
采纳率:50%
帮助的人:142万
展开全部
你好,你这个自定义函数的主要问题是:读取一次就关闭文件了,如果需要再次读取就需要再次打开,但说实话,不主张这种用法,我们一般的用法是全部读取文件的内容但结构体链表或结构体数组中,然后以此判断结构体链表或结构体数组的adder[0].num,判断完之后再次写入文件,这样才可以,你的代码只能判断文件的第一行
-物联网校企联盟技术部
更多追问追答
追问
读取一次就关闭文件了?我的关闭是的if里啊,而且fread之后文件指针会指到下一个sizeof(struct student)长度的头地址吧。(那个我有这个全部的资料源码,上面的是我自己写的,给的资料里的是那种每次都全部读进来,对数据处理后再全部写回去)但是我想问我的这个为什么不行,求实质
追答
嗯,那里判断之后关闭文件了,但还没有退出while循环都嘛,while还在继续,如果还不行点我的名字吧
pdcxs
2013-03-26
知道答主
回答量:35
采纳率:0%
帮助的人:19.8万
展开全部
读和写的转换需要用到文件指针定位或是fflush函数,,,建议看看《C语言程序设计现代方法》输入/输出的那一章。里面有解释。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小皇帝isI
2013-03-26 · TA获得超过188个赞
知道答主
回答量:294
采纳率:0%
帮助的人:67.8万
展开全部
貌似光判断的
if(adder[0].num==a)

啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式