【问题标题】:lvalue required as left operand of assignment c [duplicate]左值需要作为赋值 c 的左操作数 [重复]
【发布时间】:2015-11-22 00:40:09
【问题描述】:

在此代码

(nr % 10) % 2 == 0 ? a[i] = nr % 10 + 1 : a[i] = nr % 10;

我收到了lvalue required as left operand of assignment。谁能帮我解决这个问题?

【问题讨论】:

  • a[i] = (nr % 10) + 1 - ((nr % 10) % 2);

标签: c


【解决方案1】:

这段代码的总体问题是条件运算符是一个表达式,而不是一个语句。虽然你可以使用赋值表达式作为它的一部分,但最好是对整个表达式进行赋值,像这样:

a[i] = (nr % 2) == 0 ? nr % 10 + 1 : nr % 10;
//     ^^^^^^^^
// No need to obtain a remainder of division by 10,
// because 2 is a divisor of 10.

注意:您可以通过一个简单的技巧完全避免条件:

a[i] = nr % 10 + (1 - (nr % 2));

【讨论】:

    【解决方案2】:

    在你的最后一个作业周围加上括号来解决这个问题:

    (nr % 10) % 2 == 0 ? a[i] = nr % 10 + 1 : (a[i] = nr % 10);
    

    这是因为赋值的优先级低于三元运算符,所以像a = b ? d : c 这样的代码被解析为a = (b ? c : d) 而不是(a = b) ? c : d?: 之间的赋值不需要放在括号中,因为没有任何语法歧义。

    【讨论】:

      【解决方案3】:

      你必须使用:

      a[i] = (nr % 10) % 2 == 0 ? nr % 10 + 1 : nr % 10;
      

      【讨论】:

        猜你喜欢
        • 2018-02-04
        • 2011-09-03
        • 2018-10-19
        • 1970-01-01
        相关资源
        最近更新 更多