我在 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。您能解释一下代码吗?
我在 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){...}
因为“==”运算符的优先级高于三元运算符。