C语言 fwrite()将完成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()一次又一次地给了我第二个结构。任何帮助吗?

您必须在对同一个文件的读写访问之间发出对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);来重置文件读/写状态。

相关内容

  • 没有找到相关文章