lvalue requerido como operando izquierdo de asignación c

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;