C语言文件读写乱码(出错)
一个简单的程序:使用C语言文件读写操作复制文件
错误代码:
FILE *in = NULL,*out = NULL;
int ch = 0;
in = fopen("test.txt","r");
out = fopen("test1.txt","w");
if(in && out){
while(ch = getc(in)!= EOF) // 修正 while( (ch = getc(in)!= EOF) )
if(putc(ch,out)==EOF) break;
fclose(in);
fclose(out);
}
fclose(in);
fclose(out);
现象:
test1.txt 能被创建出来,字符个数也一样,但是新建文件内容全是矩形。
为什么字符个数相同?是不是编码问题?
遇事不决调试看看。调试的结果让我很意外每次读取到ch的值都为1,直到最后一次ch为0。这引发我一泡浓厚的兴趣,0和1 都是逻辑运算的结果,很显然这肯定和判断不相等的'!=
有关。经过一阵折腾发现问题出现在优先级上,赋值运算的优先级属于最低一等,先进行!=
在将返回的逻辑值 赋值给 ch。
运算符优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | () | 从左到右 |
2 | ! 、单目+ 、单目- 、++ 、-- | 从右到左 |
3 | * 、/ 、% | 从左到右 |
4 | + 、- | 从左到右 |
5 | < 、<= 、> 、>= | 从左到右 |
6 | == 、!= | 从左到右 |
7 | && | 从左到右 |
8 | || | 从左到右 |
9 | () | 从右到左 |
总结
在编码的过程中多使用()
来表达运算先后次序,既能保障代码正确,也方便别人阅读理解代码逻辑。