从二进制文件写入和读取不起作用

时间:2018-01-16 09:20:14

标签: c binaryfiles

所以,我想把9个数字写入二进制文件,然后从那个文件中读取它们并将它们打印到屏幕上,但由于某种原因它不起作用,我无法弄清楚为什么。我我试图在互联网上寻找答案,但似乎没有任何帮助。如果有人能指出我的代码中的错误(这可能非常明显,但我是c的新手),我会非常感激。 这是代码:

int main()
 {
    FILE *f;
    if(f=fopen("dat", "wb") == NULL){
      return 1;
    }
   int c;
   for(int i = 0; i < 9; i++){
     c = fwrite(&i, sizeof(int), 1, f);
     printf("%d",c); //it prints 0 every single time, as if nothing was written in the file
  }
  fclose(f);
  if(f=fopen("dat", "rb+")==NULL){
    return 1;
  }
  int a;
  while(fread(&a, sizeof(int), 1, f)){
    printf("%d\n", a);
  }
  fclose(f);
}

1 个答案:

答案 0 :(得分:5)

运算符优先级存在问题。

注意if声明中的比较和分配:

if (f = fopen("dat", "wb") == NULL)

比较运算符(==)的优先级高于赋值运算符(=)。上面的代码实际上相当于:

if (f = (fopen("dat", "wb") == NULL))

也就是说,首先将fopen()的调用结果与NULL进行比较,然后将此比较的结果分配给f

你真正想要的是:

if ((f = fopen("dat", "wb")) == NULL)

即,首先将fopen()的结果分配给f,然后对NULL执行比较。

这同样适用于您对fopen()的第二次调用。