如题, 知道逗号表达式的用法,求问while (i % 8|| printf("%d\n", i),i--); 为何能够输出100以内8的倍数(包括0)
在条件语句中,C 语言会做优化, 不会判断所有的结果。 if (A || B), 只要 A 是TRUE, 那么 B 就不执行了。 在你的例子中, 如果 (i % 8) 的结果不为 0 ,那就是 TRUE, 在 || 的条件组合中, C 语言就不执行下一个表达式,所以 printf() 部分就跳过去了。 只有 (i % 8) 的结果为 0 的时候, C 语言才会看 || 条件组合的下一个。
这玩意不会报错?while里面允许有','????
如果是
while(i % 8 || printf("%d\n", i)) i--;
还能正常理解一下
如果不是题主题目打错,我实在是无法理解为什么能输出
此while里面的运算顺序是先算i%8,只要i%8的结果不为0,那么“||”符号后面的printf便作废,然后执行i--步骤
当i%8的结果为0时,就会执行printf函数结果,也就是8的倍数。c语言中printf函数只要有输出,返回值都是输出字符的字符个数,永远不可能为0,所以||的判断结果就为真,继续执行i--步骤
C语言中,||符号为逻辑或,只要左边结果为真,则不计算右边结果
&&符号为逻辑真,只要左边结果为假,则不计算右边结果