C语言中使用fwrite()后,fread()无法正常工作

3
在我的程序中,我创建了一个二进制文件,其中包含结构体(每个结构体包含一个整数)...然后我在文件中放置了3个结构体...我想首先创建文件...然后关闭它...然后以"rb+"模式重新打开它...并且我希望从文件中读取结构体,并更改其值(成员数据),并将其重写到同一文件中,方法如下:
#include <stdio.h>
main()
     {
         int i;

         struct
         {
             int data;
         }x;  

         FILE* myfile=fopen("d:\\text.bin","wb");

         for(i=1;i<4;i++)
         {
              x.data=i;
              fwrite(&x,sizeof(x),1,myfile);
         }

         fclose(myfile);

         myfile=fopen("d:\\text.bin","rb+");

         for(i=0;i<3;i++)
         {
              fread(&x,sizeof(x),1,myfile);
              printf("%d\n",x.data);
              fseek(myfile,-sizeof(x),SEEK_CUR);
              x.data=2*x.data;
              fwrite(&x,sizeof(x),1,myfile);
         }

         fclose(myfile);

     }`

但是...我的标准输出文件的输出结果是: 1 2 2

应该是 1 2 3

但是...当我在fwrite(&x,sizeof(x),1,myfile);之后添加fseek(myfile,0,SEEK_CUR);时....它可以正确运行并输出: 1 2 3

有人能帮我吗???


2
测试了你的代码,得到了预期的1、2、3。同时,在运行后文件中包含了2、4、6。 - Flovdis
非常感谢您...它运行得非常完美.....非常感谢您。 - E-mad Wahid
1个回答

0

你只需要告诉程序将写模式切换为读模式,这样就可以了。

fseek(myfile,0,SEEK_CUR); 

如果不这样做,你将只会得到相同的结果,没有任何改变,或者你可能会陷入无限循环。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接