编译时错误为“需要左值”,但不确定原因

时间:2019-08-01 06:01:15

标签: c

此代码抛出一个左值所需的编译时错误。

#include <stdio.h>

void main()
{
    int k = 8;
    int m = 7;
    k < m ? k++ : m = k;
    printf("%d", k);
}

2 个答案:

答案 0 :(得分:1)

三元运算符的优先级高于赋值的优先级,这就是为什么您的代码等于(k < m ? k++ : m) = k;的原因。您的编译器说方括号中的值是不可分配的。

您想要做的是:

#include <stdio.h>

void main()
{
    int k = 8;
    int m = 7;
    k < m ? k++ : (m = k);
    printf("%d", k);
}

答案 1 :(得分:0)

问题在这里:

k < m ? k++ : m = k;

使用要分配值的构造,但您不需要。我猜你想要这样的东西:

   k =  (k < m) ? k+1 : m;

现在,您将根据条件kk < m分配一个值

  

如果(k k = k + 1
  否则-> k = m