繁体   English   中英

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,1,SEEK_CUR); ,但是有必要调用fseek(fc,0,SEEK_CUR); 在切换回读取模式之前重置文件的读取/写入状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM