Error de “lvalue requerido como operando de asignación izquierdo”

El siguiente código produce un “lvalue requerido como operando de asignación izquierdo”

if( c >= 'A' && c <= 'Z' || c = " " || c = ",") { 

Supongo que estoy escribiendo esto mal, ¿qué está mal? ¿Y cómo lo escribiría correctamente?

Debe usar comillas simples para los caracteres y hacer dobles iguales para la igualdad (de lo contrario, cambia el valor de c)

 if( c >= 'A' && c <= 'Z' || c == ' ' || c == ',') { 

Además, podrías considerar algo como esto para aclarar tu lógica booleana:

 if( (c >= 'A' && c <= 'Z') || c == ' ' || c == ',') { 

Aunque su estructura lógica booleana funciona de manera equivalente (&& tiene prioridad sobre ||), este tipo de cosas podrían hacer que se tropiece en el futuro.

la igualdad es == , = es la asignación. Quieres usar == . También "" es un char* , las comillas simples hacen un carácter.

Además, agregar algunos parámetros a su condición haría que su código sea mucho más fácil de leer. Al igual que

  ((x == 'c' && y == 'b') || (z == ',') || (z == ' ')) 

= es el operador de asignación, no el operador de comparación. Usted está buscando == .

Personalmente, prefiero el estilo minimalista:

 ((x == 'c' && y == 'b') || (z == ',') || (z == ' ')) ( x == 'c' && y == 'b' || z == ',' || z == ' ' ) 

o

 ( x == 'c' && y == 'b' ? z == ',' : z == ' ' ) 

en contra

 ( x == 'c' && y == 'b' ? z == ',' : z == ' ')