elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error en C: (Ivalue required as left...)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error en C: (Ivalue required as left...)  (Leído 5,087 veces)
Constantinoplero


Desconectado Desconectado

Mensajes: 346


Veni, vidi, vici


Ver Perfil WWW
Error en C: (Ivalue required as left...)
« 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.


En línea

Más que buenos principios prefiero mejores finales.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Error en C: (Ivalue required as left...)
« Respuesta #1 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


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Constantinoplero


Desconectado Desconectado

Mensajes: 346


Veni, vidi, vici


Ver Perfil WWW
Re: Error en C: (Ivalue required as left...)
« Respuesta #2 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í?
En línea

Más que buenos principios prefiero mejores finales.
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Error en C: (Ivalue required as left...)
« Respuesta #3 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines