wuligreen
wuligreen
2021-02-17 23:52
采纳率: 0%
浏览 50

C语言中 while (i % 8|| printf("%d\n", i),i--);

如题, 知道逗号表达式的用法,求问while (i % 8|| printf("%d\n", i),i--); 为何能够输出100以内8的倍数(包括0)

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • SoftwareTeacher
    SoftwareTeacher 2021-02-18 01:51

     

    在条件语句中,C 语言会做优化, 不会判断所有的结果。 if (A || B), 只要 A 是TRUE, 那么 B 就不执行了。 在你的例子中, 如果 (i % 8) 的结果不为 0 ,那就是 TRUE,  在 ||  的条件组合中, C 语言就不执行下一个表达式,所以 printf() 部分就跳过去了。 只有 (i % 8) 的结果为 0 的时候, C 语言才会看 || 条件组合的下一个。 

    点赞 2 评论
  • qq_43414873
    小白小白你好菜 2021-02-18 21:43

    这玩意不会报错?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语言中,||符号为逻辑或,只要左边结果为真,则不计算右边结果

    &&符号为逻辑真,只要左边结果为假,则不计算右边结果

    点赞 评论

相关推荐