【发布时间】: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
在此代码
(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
这段代码的总体问题是条件运算符是一个表达式,而不是一个语句。虽然你可以使用赋值表达式作为它的一部分,但最好是对整个表达式进行赋值,像这样:
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));
【讨论】:
在你的最后一个作业周围加上括号来解决这个问题:
(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。 ? 和 : 之间的赋值不需要放在括号中,因为没有任何语法歧义。
【讨论】:
你必须使用:
a[i] = (nr % 10) % 2 == 0 ? nr % 10 + 1 : nr % 10;
【讨论】: