en este código
(nr % 10) % 2 == 0 ? a[i] = nr % 10 + 1 : a[i] = nr % 10;
Obtengo un lvalue required as left operand of assignment
. Puede alguien ayudarme con esto?
Ponga paréntesis alrededor de su última tarea para resolver esto:
(nr % 10) % 2 == 0 ? a[i] = nr % 10 + 1 : (a[i] = nr % 10);
Esto se debe a que la asignación tiene una prioridad más baja que el operador ternario, por lo tanto, el código como a = b ? d : c
a = b ? d : c
se analiza como a = (b ? c : d)
y no como (a = b) ? c : d
(a = b) ? c : d
. La asignación entre ?
y :
no es necesario colocarlo entre paréntesis, ya que no existe ninguna ambigüedad sintáctica.
El problema general con este código es que el operador condicional es una expresión , no una statement . Aunque puede usar expresiones de asignación como parte, es mejor hacer la asignación de la expresión completa, así:
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.
Nota: Podrías evitar el condicional por completo con un simple truco:
a[i] = nr % 10 + (1 - (nr % 2));
Tienes que usar:
a[i] = (nr % 10) % 2 == 0 ? nr % 10 + 1 : nr % 10;