C语言 一个奇怪的错误
在学到打开和关闭文件这一章时,这个是一句正确的代码。while ((ch = fgetc(fp1))!= EOF)当我少了个括号,编译器会报错while (ch = fgetc(fp1) != EOF)�: In function 'main':
�:33:12: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
while (ch = fgetc(fp1) != EOF)
而当我再加一层括号,编译器就不会报错了while ((ch = fgetc(fp1) != EOF))
但是获取到的是原本应打印的文本“123 你好 hello”被输出成“
”
所以有鱼油可以解释一下这段代码的运行顺序和为什么加了层括号就不会报错吗?while ((ch = fgetc(fp1) != EOF))
所以把这个语句拆开写就好了,没必要写复合语句的
事实上在哪里加括号是有讲究的,并不是编译没错就可以的 while (ch = fgetc(fp1) != EOF)这一句中 !=的优先级大于 = ,所以会把true或false赋值给ch,这样就成了死循环所以警告你
又加了层括号相当于你欺骗编译器所以,不把它当成死循环 159662-会稽 发表于 2022-7-7 17:40
while (ch = fgetc(fp1) != EOF)这一句中 !=的优先级大于 = ,所以会把true或false赋值给ch,这样就成了死循 ...
死循环编译器是不会报错的吧。否则while(1)为什么给通过不报错?问题应该是这个赋值顺序是危险的,所以编译给了个建议(建议在赋值周围使用括号作为真值),而我刚好多加了个括号造成编译器不报错,这个问题就特别难发现了{:10_277:} TomZz 发表于 2022-7-7 18:34
死循环编译器是不会报错的吧。否则while(1)为什么给通过不报错?问题应该是这个赋值顺序是危险的,所以编 ...
它这不是报错吧,warning是警告,ERROR才是报错呀 学了很久Python,我现在编写C语言已是寸步难行,但我的脑海里隐隐约约有点记得好像是重复打印了printf函数的第一个隐藏字符,或者是这个文件的第一个字符吧?只能等大佬来解读,你是至尊会员有没有特权让老甲鱼过来{:10_279:} 159662-会稽 发表于 2022-7-8 00:16
学了很久Python,我现在编写C语言已是寸步难行,但我的脑海里隐隐约约有点记得好像是重复打印了printf函数的 ...
这个是完整的错误代码。
while (ch = fgetc(fp1) != EOF)
{
putchar(ch);
fputc(ch, fp2);
}
先运行fget(fp1)!=EOF,fp1指针指向的文件中有"123"三个数字,所以进行了三次while循环,每次ch都是int类型的1,然后1会被转为ascii码对应的字符输出到控制台和写入到文件,1对应的ascii码正是SOH(start of heading),你说的应该没错{:10_254:} 159662-会稽 发表于 2022-7-8 00:16
学了很久Python,我现在编写C语言已是寸步难行,但我的脑海里隐隐约约有点记得好像是重复打印了printf函数的 ...
但是SOH不是第一个字符的意思,是用于网络通讯的一个指令(报文开始) TomZz 发表于 2022-7-8 12:34
但是SOH不是第一个字符的意思,是用于网络通讯的一个指令(报文开始)
错误的代码有研究的意义???? wp231957 发表于 2022-7-8 12:42
错误的代码有研究的意义????
用于防止下次错误,并积累经验,在下次报错时快速反应{:10_277:}
页:
[1]