以下程序给出错误
#include<stdio.h>
int main ()
{
int a=10,b;
a>=5?b=100:b=200;
printf("\n%d",b);
}
错误是
ka1.c: In function ‘main’:
ka1.c:5: error: lvalue required as left operand of assignment
现在如果我更换行
a>=5?b=100:b=200;
通过
a>=5?b=100:(b=200);
然后编译然后没有错误。 所以我想知道
有什么问题a>=5?b=100:b=200;
答案 0 :(得分:10)
三元运算符(?:
)的higher precedence比赋值运算符(=
)多。所以你原来的陈述被解释为:
((a >= 5) ? (b = 100) : b) = 200;
这样写:
b = (a >= 5) ? 100 : 200;
这是惯用的C.(条件周围的括号不是必需的,但它们有助于提高可读性。)
答案 1 :(得分:3)
您错误地使用了三元运算符。你的两个例子都是错误的,即使有人编译。表达式根据第一个表达式的真值来评估第二个或第三个子表达式。
如果a ? b : c
为真,则b
与a
相同,如果c
为假,则为a
。
使用此运算符的正确方法是将结果分配给变量:
b = a>= 5 ? 100 : 200;
答案 2 :(得分:1)
因为它试图这样做:(a>=5?b=100:b)=200
但是括号中的东西不是左值。