Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Constantinoplero en 13 Noviembre 2011, 02:53 am



Título: Error en C: (Ivalue required as left...)
Publicado por: Constantinoplero en 13 Noviembre 2011, 02:53 am
Buenas noches, estoy haciendo un ejercicio voluntario de Informática en C, y vuelvo a tener una duda con el error que me arroja Codeblocks, como ya paso unos días cuando estaba estudiando por mi cuenta.

El programa debe pedir un día, comprobar que sea correcto (1-31), lo mismo con los meses (1-12) y si sale 29 de febrero, asegurarse que es posible porque sea bisiesto.

Código:
    if (dia>=1 && dia<=31 && mes=1 || mes=3 || mes=5 || mes=7 || mes=8 || mes=10 || mes=12)
        printf("Hoy es %u del %u.", dia, mes);

En esta parte del código me sale un error diciendo: 'lvalue required as left operand of assignment'. Concretamente aparece en la línea del if.

¿Por qué aparece? ¿Se puede poner todo eso en la misma línea o debo separarlos?
P.D.: Tengo que hacer el programa con if y con switch, por eso está así.

Saludos.


Título: Re: Error en C: (Ivalue required as left...)
Publicado por: rir3760 en 13 Noviembre 2011, 03:54 am
El error se genera debido a que en la condicion del "if" estas utilizando el operador de asignacion '=' cuando deberia ser el de comparacion '==', de esta forma:
Código
  1. if (dia >= 1 && dia <= 31
  2.   && mes == 1 || mes == 3 || mes == 5 || mes == 7
  3.   || mes == 8 || mes == 10 || mes ==12
  4. )
  5.   printf("Hoy es %u del %u.", dia, mes);

Pero con ese cambio no funcionara correctamente si la intencion es verificar que el dia este en el rango 1 .. 31 y el mes sea el indicado (1, 3, 5, 7, 8, 10 o 12) ya que el operador "&&" tiene mayor prioridad que el operador "||".

La forma correcta es utilizando parentesis:
Código
  1. if (dia >= 1 && dia <= 31
  2.   && (mes == 1 || mes == 3 || mes == 5 || mes == 7
  3.   || mes == 8 || mes == 10 || mes == 12)
  4. )
  5.   printf("Hoy es %u del %u.", dia, mes);

Un saludo


Título: Re: Error en C: (Ivalue required as left...)
Publicado por: Constantinoplero en 13 Noviembre 2011, 14:07 pm
Lo de los paréntesis lo leí buscando, pero como igualaba en vez de comparar seguía saliendo error...

Gracias por la ayuda!

Por cierto, ¿cómo hacéis para poner en colores el código aquí?


Título: Re: Error en C: (Ivalue required as left...)
Publicado por: DickGumshoe en 13 Noviembre 2011, 14:31 pm
En el menú de "responder", en un cuadro pone "Cambiar color", ahí no es, es justo en el de arriba. Donde pone "GeSHi", seleccionas el lenguaje que estás usando, y metes ahí el código.