fwrite() 会完成 fseek(f,1,SEEK_CUR) 的工作吗?
fwrite() will do the job of fseek(f,1,SEEK_CUR)?
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()
一次又一次地给了我第二个结构。
有帮助吗?
您必须在对同一文件的读写访问之间发出对 fseek
或 rewind
的调用。以这种方式修复代码:
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);
来重置切换回读取模式前的文件 read/write 状态。
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()
一次又一次地给了我第二个结构。
有帮助吗?
您必须在对同一文件的读写访问之间发出对 fseek
或 rewind
的调用。以这种方式修复代码:
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);
来重置切换回读取模式前的文件 read/write 状态。