我在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但我认为?b:c返回b = 0而0 == 0返回1.您能解释一下代码吗?
答案 0 :(得分:4)
条件运算符(?:
)具有最低优先级之一。特别是它低于==
。您的陈述意味着:
if(a ? b : (c == 0)) { ... }
不是这个:
if((a ? b : c) == 0) { ... }
答案 1 :(得分:3)
您的条件写得不好。
在第一个if语句中:
if (a ? b : c == 0)
如果您输入值,则它变为
if(10 ? 0 : 7 == 0)
表示它始终返回0.
这就是控制进入其他部分的原因,它变成了
else if (7 = 7 || 10 && 0)
因为你在这里使用了“=”运算符(c = c),所以它总是为真,因此它会打印“2”。
现在您希望代码返回“1”,然后以这种方式更改您的if语句。
if( (a ? b:c) == 0){...}
因为“==”运算符的优先级高于三元运算符。