You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

while循环中使用三元运算符时i输出1而非0的原因是什么

#include<stdio.h>
int main(){
    int i=2,j=2;
    while(i+1?--i:j++)
         printf("%d",i);
    return 0;
}

执行逻辑逐轮拆解

你产生这个疑惑的核心是混淆了「三目运算符的执行时机」和「循环体的触发规则」,跟着执行顺序走一遍就清楚了:
首先明确两个核心规则:

  • 三目运算符a?b:c的执行逻辑:先计算a的值,非0就执行b并返回b的结果,为0就执行c并返回c的结果
  • while循环的规则:只有判断条件的结果非0时,才会进入循环体执行内部的printf,条件为0直接终止循环,不会执行循环体内容。

第一轮循环判断(初始值i=2,j=2)

  1. 先算三目运算符的判断条件i+1:2+1=3,非0,执行冒号左侧的--i
  2. i自减1从2变成1,--i的返回值是1,因此整个三目表达式的结果是1
  3. while判断结果为真,进入循环体,执行printf输出i的值,也就是1

第二轮循环判断(当前i=1,j=2)

  1. 先算三目运算符的判断条件i+1:1+1=2,非0,继续执行冒号左侧的--i
  2. i自减1从1变成0,--i的返回值是0,因此整个三目表达式的结果是0
  3. while判断结果为假,直接终止循环,不会进入循环体执行printf

所以整个程序只会输出一次1,不会输出0,第二次的i自减是在循环条件判断阶段执行的,执行完直接触发了循环终止,没有机会把0打印出来。

内容的提问来源于stack exchange,提问作者synth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:36:04