所以,我想把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);
}
Run Code Online (Sandbox Code Playgroud)
运算符优先级存在问题.
注意if语句中的比较和赋值:
if (f = fopen("dat", "wb") == NULL)
Run Code Online (Sandbox Code Playgroud)
比较运算符(==)的优先级高于赋值运算符(=).上面的代码实际上相当于:
if (f = (fopen("dat", "wb") == NULL))
Run Code Online (Sandbox Code Playgroud)
也就是说,fopen()首先将调用的结果与之进行比较NULL,然后将该比较的结果分配给f.
你真正想要的是:
if ((f = fopen("dat", "wb")) == NULL)
Run Code Online (Sandbox Code Playgroud)
即,首先分配的结果fopen()来f,然后执行针对比较NULL.
这同样适用于您的第二次电话会议fopen().
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |