三元opertor输出

时间:2016-01-21 20:26:37

标签: c

我遇到过一段代码。我想知道为什么下面的代码将x的值返回为4而不是零。

 if(2<1);
 else x = (2<0) ? printf("one") : printf("four");
 printf("%d",x);

输出为4

2 个答案:

答案 0 :(得分:4)

请不要试图阅读不可读的内容,使其易读并享受

if (2 < 1);
else 
    x = (2 < 0) ? printf("one") : printf("four");
printf("%d", x);

当然2 < 1为false,2 < 0再次为false,因此printf("four")的返回值为4,因为"four"有4个字符到"x"

所以输出应该是

four4

答案 1 :(得分:3)

函数printf返回打印字符数。

因为在这个条件运算符中

 (2<0)?printf("one"):printf("four")

条件(2<0)为false此表达式printf("four")被评估,其值等于4 - 输出字符的数量。

从函数printf的描述(C标准,7.21.6.3 printf函数)

  

3 printf函数返回字符数   传输,如果输出或编码错误,则为负值   发生。

我认为混淆的原因是之前的赋值运算符 条件运算符。但是,与条件运算符相比,赋值运算符的优先级较低。所以事实上你有

 else x = ( (2<0) ? printf("one") : printf("four") );