1

可能重复:
错误:这个简单的 C 代码中需要左值?(三元分配?)

在下面的代码中,我收到了类似“ 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;
}
4

5 回答 5

3

没有你额外的 ()s,我认为运算符优先级将其分组为

   ((i>j)?k=i:k)=j;

这显然不是您想要的,并且确实存在左值问题。

修复它

  k= (i>j) ? i : j;

于 2012-08-22T07:34:20.170 回答
2

很明显,可以以更好的方式重写此条件,但是由于=and?:运算符的优先级,可以观察到您的问题。

赋值运算符?:的优先级高于=,因此表达式

( i > j ) ? k = i : k = j;

相当于

(( i > j ) ? k = i : k) = j;

这是不正确的,因为您不能分配给表达式结果。

事实上,这种情况与(( i > j ) : i : j) = 10;不正确的情况相似。

于 2012-08-22T07:35:09.607 回答
1

怎么写成这样。

int main()
 {
   int i,j,k;
   i=2;j=9;
   k = (i > j) ? i : j;
   printf("%d\n",k);
   return 0;
 }
于 2012-08-22T07:24:28.400 回答
0

相当 :

k = i > j ? i : j;
于 2012-08-22T07:25:02.917 回答
0

您需要分配此运算符的返回值。三元运算符的语法如下..

result = condition ? first_expression : second_expression;  

你在你的代码中遗漏了..所以你可以简单地把它放在下面..

int k = (i > j) ? i : j;
于 2012-08-22T07:30:48.360 回答