我遇到过一段代码。我想知道为什么下面的代码将x的值返回为4而不是零。
if(2<1);
else x = (2<0) ? printf("one") : printf("four");
printf("%d",x);
输出为4
答案 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") );