赋值c的左操作数需要左值

赋值c的左操作数需要左值,c,C,按此代码 (nr % 10) % 2 == 0 ? a[i] = nr % 10 + 1 : a[i] = nr % 10; 我得到了赋值的左操作数所需的左值。有人能帮我吗?您必须使用: a[i] = (nr % 10) % 2 == 0 ? nr % 10 + 1 : nr % 10; 这段代码的总体问题是,条件运算符是表达式,而不是语句。虽然可以使用赋值表达式作为其一部分,但最好对整个表达式进行赋值,如下所示: a[i] = (nr % 2) == 0 ? nr % 10 + 1 : n

按此代码

(nr % 10) % 2 == 0 ? a[i] = nr % 10 + 1 : a[i] = nr % 10;
我得到了赋值的左操作数所需的
左值。有人能帮我吗?

您必须使用:

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

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

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)+1-((nr%10)%2)