gpt4 book ai didi

c - fwrite() 会完成 fseek(f,1,SEEK_CUR) 的工作吗?

转载 作者:行者123 更新时间:2023-11-30 17:14:12 25 4
gpt4 key购买 nike

fwrite() 会完成 fseek(f,1,SEEK_CUR) 的工作吗?

我的代码是:

while (fread(&tmp,sizeof(compt),1,fc))
{
if(tmp.num == m.crd ){

tmp.Solde-=m.mon;
fseek(fc,-sizeof(compt),SEEK_CUR);
fwrite(&tmp,sizeof(compt),1,fc);

}
if(tmp.num == m.deb){

tmp.Solde+=m.mon;
fseek(fc,-sizeof(compt),SEEK_CUR);
fwrite(&tmp,sizeof(compt),1,fc);
fseek(fc,1,SEEK_CUR);

}

}
  • 该文件是一组两个结构体,我把它们放在前面。
  • 文件在 r+ 中打开。

我的问题是无限循环开始。当我打开调试器时,我看到 fread() 一次又一次地给了我第二个结构。有什么帮助吗?

最佳答案

您必须调用fseekrewind对同一文件的读和写访问之间。按如下方式修复代码:

while (fread(&tmp, sizeof(compt), 1, fc) == 1) { 
if (tmp.num == m.crd ) {
tmp.Solde -= m.mon;
fseek(fc, -sizeof(compt), SEEK_CUR);
fwrite(&tmp, sizeof(compt), 1, fc);
fseek(fc, 0, SEEK_CUR);
}
if (tmp.num == m.deb) {
tmp.Solde += m.mon;
fseek(fc, -sizeof(compt), SEEK_CUR);
fwrite(&tmp, sizeof(compt), 1, fc);
fseek(fc, 0, SEEK_CUR);
}
}

顺便说一句,从您提供的上下文元素来看,使用 fseek(fc,1,SEEK_CUR); 仅将文件指针移动 1 个字节并没有多大意义。 ,但需要调用fseek(fc,0,SEEK_CUR);在切换回读取模式之前重置文件读/写状态。

关于c - fwrite() 会完成 fseek(f,1,SEEK_CUR) 的工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30444510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com