两种不同事物之间的比较语法

时间:2011-06-20 17:04:43

标签: c operators

以下程序给出错误

#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;

3 个答案:

答案 0 :(得分:10)

三元运算符(?:)的higher precedence比赋值运算符(=)多。所以你原来的陈述被解释为:

((a >= 5) ? (b = 100) : b) = 200;

这样写:

b = (a >= 5) ? 100 : 200;

这是惯用的C.(条件周围的括号不是必需的,但它们有助于提高可读性。)

答案 1 :(得分:3)

您错误地使用了三元运算符。你的两个例子都是错误的,即使有人编译。表达式根据第一个表达式的真值来评估第二个或第三个子表达式。

如果a ? b : c为真,则ba相同,如果c为假,则为a

使用此运算符的正确方法是将结果分配给变量:

b = a>= 5 ? 100 : 200;

答案 2 :(得分:1)

因为它试图这样做:(a>=5?b=100:b)=200 但是括号中的东西不是左值。