可能重复:
Error: lvalue required in this simple C code? (Ternary with assignment?)
在下面的代码中,我收到了类似“lvalue required as left operand of assignment
”的错误。我无法理解为什么会报告这样的错误。但是当我在像(i>j)?(k=i):(k=j)
这样的表达式中使用括号时,它没有报告错误。请解释一下。
int main() {
int i = 2;
int j = 9;
int k;
(i>j) ? k=i : k=j;
printf("%d\n",k);
return 0;
}
答案 0 :(得分:3)
如果没有你的额外(),我认为运算符优先级是将其分组为
((i>j)?k=i:k)=j;
这显然不是你想要的,而且确实有左值问题。
用
修复它 k= (i>j) ? i : j;
答案 1 :(得分:2)
很明显,这种情况可以更好地重写,但由于=
和?:
运营商的优先权,您的问题得到了解决。
赋值运算符?:
的优先级高于=
,因此表达式
( i > j ) ? k = i : k = j;
相当于
(( i > j ) ? k = i : k) = j;
哪个不正确,因为您无法分配表达式结果。
事实上,这种情况与(( i > j ) : i : j) = 10;
类似,但也不正确。
答案 2 :(得分:1)
这样写作怎么样。
int main()
{
int i,j,k;
i=2;j=9;
k = (i > j) ? i : j;
printf("%d\n",k);
return 0;
}
答案 3 :(得分:0)
相反:
k = i > j ? i : j;
答案 4 :(得分:0)
您需要指定此运算符的返回值。 三元运算符的语法如下:
result = condition ? first_expression : second_expression;
你在代码中遗漏了.. 所以你可以简单地把它说成跟随......
int k = (i > j) ? i : j;