[英]Ternary operator in loop conditional: evaluation order / op. precedence unclear
[英]Operator precedence and ternary operator
我在C有问题。
#include<stdio.h>
int main()
{
int a = 10, b = 0, c = 7;
if (a ? b : c == 0)
printf("1");
else if (c = c || a && b)
printf("2");
return 0;
}
此代码打印 2,但我认为 a?b:c 返回 b=0,0==0 返回 1。您能解释一下代码吗?
条件运算符 ( ?:
) 具有最低的优先级之一。 特别是它低于==
。 你的陈述是这样的:
if(a ? b : (c == 0)) { ... }
不是这个:
if((a ? b : c) == 0) { ... }
你的条件没有写好。
在第一个 if 语句中:
if (a ? b : c == 0)
如果你输入值,那么它就变成了
if(10 ? 0 : 7 == 0)
意味着,它将始终返回 0。
这就是为什么控制转到 else 部分,在那里,它变成了
else if (7 = 7 || 10 && 0)
由于您在此处使用了“=”运算符 (c = c),因此它将始终为真,因此它会打印“2”。
现在您希望该代码返回“1”,然后以这种方式更改您的 if 语句。
if( (a ? b:c) == 0){...}
因为“==”运算符的优先级高于三元运算符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.