【问题标题】:Getting error "lvalue required as left operand of assignment"获取错误“需要左值作为赋值的左操作数”
【发布时间】:2016-11-01 06:38:33
【问题描述】:

我是 C 新手,在编译简单代码时遇到以下问题:

#include <stdio.h>

int main()
{
    int i, a, b;
    i = 3;
    a = b = 0;

    printf("Before: ");
    printf("%d %d\n", a, b);
    i == 3 ? a = 4 : a = 10; /* Line 9 */

    printf("After: ");
    printf("%d %d\n", a, b);
    return 0;
}

给我错误:

#gcc some.c
In function ‘main’:
some.c:9: error: lvalue required as left operand of assignment

我无法理解。我做错了什么?

【问题讨论】:

    标签: c compiler-errors ternary-operator conditional-operator


    【解决方案1】:
    a = (i == 3 ? 4 : 10);
    

    试试这个! :-)

    【讨论】:

      【解决方案2】:

      三元运算符不是这样工作的。您应该使用括号为相等运算符提供更高的优先级。检查优先级。默认情况下,相等运算符的优先级最低。

      【讨论】:

        【解决方案3】:

        ?: 是一个三元运算符。
        三元运算符的优先级高于“=”运算符。
        所以你的代码的第 9 行是这样工作的..

            (i == 3 ? a = 4 : a) = 10;
        

        你必须使用括号或修改你的句子。
        您可以将第 9 行替换为以下任一行。

            i == 3 ? a = 4 : (a = 10);
        
            a = i == 3 ? 4 : 10;
        

        【讨论】:

          【解决方案4】:

          您需要在三元运算符之外进行赋值,而不是在其内部,因为三元运算符的绑定比赋值更紧密。所以你应该写

          a = ((i == 3) ? 4 : 10);
          

          你写的等于

          (i == 3 ? a = 4 : a ) = 10;
          

          在此代码中,分配了一个右值。这和写一样的错误

          myfunc() = 16;
          

          化妆说明:在这种情况下,最好使用 if else 语句而不是条件运算符,因为这里更清楚。

          if (i == 3)
              a = 4;
          else
              a = 10;
          

          【讨论】:

            【解决方案5】:

            试试这个

            if (i==3) a = 4; else a = 10;
            

            【讨论】:

              【解决方案6】:

              这个运算符

              i==3 ? a=4 : a = 10;
              

              等价于

              ( i==3 ? a=4 : a ) = 10;
              

              改为使用

              i==3 ? a=4 : ( a = 10 );
              

              【讨论】:

              • @EmZoStark 完全没有。:)
              猜你喜欢
              • 2011-12-20
              • 2011-03-04
              • 2017-01-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多