Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Problema con programa en C

Estas en el tema de Problema con programa en C en el foro de C/C++ en Foros del Web. Buenas! Necesito que me ayudéis a ver en qué estoy fallando en este programa que comprueba una fech si está bien o no. Código: #include ...
  #1 (permalink)  
Antiguo 23/01/2013, 13:19
Avatar de airweb  
Fecha de Ingreso: enero-2013
Ubicación: En el ciberespacio
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Problema con programa en C

Buenas!

Necesito que me ayudéis a ver en qué estoy fallando en este programa que comprueba una fech si está bien o no.

Código:
#include <stdio.h>

int main() {
	int d,m,y, i;
	
	printf("Introduce el día:\n");
	scanf("%d", &d);
	printf("Introduce el mes\n");
	scanf("%d", &m);
	printf("Introduce el año:\n");
	scanf("%d", &y);
	
	switch (m) {
		case 1: case 3: case 5: case 7: case 8: case 10: case 12:
		if (m<31 && m>0) {
			printf ("Es una fecha valida");
		else printf("La fecha introducida no es correcta");
		break;
		}
		case 4: case 6: case 9: case 11: 
		if (m<30 && m>0){
				printf("Es una fecha válida");
		else printf("La fecha introducida no es correcta");
		break;
		default : printf("La fecha no es correcta");
		}
		break;
	}
}
El compilador me dice que hay fallo en el else :(
Gracias ;)
  #2 (permalink)  
Antiguo 23/01/2013, 15:13
Avatar de ZeKi  
Fecha de Ingreso: noviembre-2012
Ubicación: Jaén
Mensajes: 61
Antigüedad: 11 años, 5 meses
Puntos: 6
Respuesta: Problema con programa en C

Código C++:
Ver original
  1. if(...){
  2.   //Código
  3. }else{
  4.   //Código
  5. }

Pon los condicionales con sus corchetes correspondientes.
  #3 (permalink)  
Antiguo 23/01/2013, 16:11
Avatar de inkari  
Fecha de Ingreso: enero-2013
Mensajes: 2
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema con programa en C

Así creo que está bien.
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.     int d,m,y, i;
  5.  
  6.     printf("Introduce el día:\n");
  7.     scanf("%d", &d);
  8.     printf("Introduce el mes\n");
  9.     scanf("%d", &m);
  10.     printf("Introduce el año:\n");
  11.     scanf("%d", &y);
  12.  
  13.     switch (m) {
  14.         case 1: case 3: case 5: case 7: case 8: case 10: case 12:
  15.         if (m<31 && m>0) {
  16.             printf ("Es una fecha valida");
  17.         }
  18.         else{
  19.             printf("La fecha introducida no es correcta");
  20.         }
  21.         break;
  22.  
  23.         case 4: case 6: case 9: case 11:
  24.         if (m<30 && m>0){
  25.             printf("Es una fecha válida");
  26.         }
  27.         else{
  28.             printf("La fecha introducida no es correcta");
  29.         }
  30.         break;
  31.         default:
  32.             printf("La fecha no es correcta");
  33.         break;
  34.     }
  35. }
  #4 (permalink)  
Antiguo 23/01/2013, 23:05
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Problema con programa en C

En los ifs deberia ir la variable d
  #5 (permalink)  
Antiguo 24/01/2013, 05:41
Avatar de ZeKi  
Fecha de Ingreso: noviembre-2012
Ubicación: Jaén
Mensajes: 61
Antigüedad: 11 años, 5 meses
Puntos: 6
Respuesta: Problema con programa en C

Cita:
Iniciado por cesar_casla Ver Mensaje
En los ifs deberia ir la variable d
Efectivamente, en los if's lo que estás comprobando los días, por lo que las comprobaciones las debes hacer con la variable d.
  #6 (permalink)  
Antiguo 24/01/2013, 07:30
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Problema con programa en C

Cita:
Iniciado por inkari Ver Mensaje
Así creo que está bien.
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.     int d,m,y, i;
  5.  
  6.     printf("Introduce el día:\n");
  7.     scanf("%d", &d);
  8.     printf("Introduce el mes\n");
  9.     scanf("%d", &m);
  10.     printf("Introduce el año:\n");
  11.     scanf("%d", &y);
  12.  
  13.     switch (m) {
  14.         case 1: case 3: case 5: case 7: case 8: case 10: case 12:
  15.         if (m<31 && m>0) {
  16.             printf ("Es una fecha valida");
  17.         }
  18.         else{
  19.             printf("La fecha introducida no es correcta");
  20.         }
  21.         break;
  22.  
  23.         case 4: case 6: case 9: case 11:
  24.         if (m<30 && m>0){
  25.             printf("Es una fecha válida");
  26.         }
  27.         else{
  28.             printf("La fecha introducida no es correcta");
  29.         }
  30.         break;
  31.         default:
  32.             printf("La fecha no es correcta");
  33.         break;
  34.     }
  35. }
Cualquier fecha de febrero saldría como no válida
__________________
Aviso: No se resuelven dudas por MP!
  #7 (permalink)  
Antiguo 25/01/2013, 19:42
Avatar de airweb  
Fecha de Ingreso: enero-2013
Ubicación: En el ciberespacio
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema con programa en C

Hola!

A ver, lo he modificado un poco, a ver si sabéis porqué en los años no bisiestos no me sale :(

Código:
#include <stdio.h>

int main() {
	int d,m,y, i;
	
	printf("Introduce el día:\n");
	scanf("%d", &d);
	printf("Introduce el mes\n");
	scanf("%d", &m);
	printf("Introduce el año:\n");
	scanf("%d", &y);
	
	switch (m) {
		
		case 1: case 3: case 5: case 7: case 8: case 10: case 12:{
		if (d<31 && d>0) {
			printf ("Es una fecha valida");
		}
		else { printf("La fecha introducida no es correcta");}}
		break;
		case 2: 
		if(y%4==0 && d<30 && d>0){
			printf("La fecha es valida en feb");
		}
Aquí digo que falla=> if (y%4!=0 && d<29 && d>0){ 
			printf("La fecha es valida feb");
		}
		break;
		case 4: case 6: case 9: case 11: 
		if (d<30 && d>0){
				printf("Es una fecha válida");
		}
		else {printf("La fecha introducida no es correcta");}
		break;
		default : printf("La fecha no es correcta");
		break;
		}
		}
Gracias!
  #8 (permalink)  
Antiguo 26/01/2013, 04:14
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Problema con programa en C

Los cases no necesitan corchetes.

El problema es que has repetido un condicional dos veces:
Código C:
Ver original
  1. if(y%4==0 && d<30 && d>0){
  2.             printf("La fecha es valida en feb");
  3.         }
  4. Aquí digo que falla=> if (y%4!=0 && d<29 && d>0){
  5.             printf("La fecha es valida feb");
  6.         }
Quedaría algo así:

Código C:
Ver original
  1. if(y%4==0 && d<30 && d>0)
  2. {
  3.             printf("La fecha es valida en feb");
  4. }
  5. else
  6. {
  7.             printf("La fecha no es valida en feb");
  8. }
  #9 (permalink)  
Antiguo 26/01/2013, 07:21
Avatar de airweb  
Fecha de Ingreso: enero-2013
Ubicación: En el ciberespacio
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema con programa en C

Hola compañero.

Gracias por responder. La verdad es que en realidad así creo que no quedaría bien, pues si la fecha dada tiene 29 días y no es bisiesto te dice que la fecha no es válida cuando lo es. Yo lo quiero es poner que si el módulo del año entre 4 es 0 el año es bisiesto y por tanto febrero tendría 29 días y si el año es no bisiesto, que febrero tenga 28 días.

¿Cómo lo puedo hacer?
  #10 (permalink)  
Antiguo 26/01/2013, 08:29
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Problema con programa en C

Puedes revisar tu algoritmo para el año bisiesto (aquí).
  #11 (permalink)  
Antiguo 26/01/2013, 08:37
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Problema con programa en C

Cita:
Iniciado por airweb Ver Mensaje
Hola compañero.

Gracias por responder. La verdad es que en realidad así creo que no quedaría bien, pues si la fecha dada tiene 29 días y no es bisiesto te dice que la fecha no es válida cuando lo es. Yo lo quiero es poner que si el módulo del año entre 4 es 0 el año es bisiesto y por tanto febrero tendría 29 días y si el año es no bisiesto, que febrero tenga 28 días.

¿Cómo lo puedo hacer?
En realidad lo que te es "La fecha no es válida en FEB" por lo que en principio estaría bien.

Si quieres que solo te muestre ese mensaje si seleccionas febrero. Lo tienes que meter en su propio case:

Código C++:
Ver original
  1. case 2: // Febrero
  2.  
  3. if(y%4==0 && d<30 && d>0)
  4. {
  5.             printf("La fecha es valida");
  6. }
  7. else
  8. {
  9.             printf("La fecha no es valida en");
  10. }
  #12 (permalink)  
Antiguo 27/01/2013, 12:22
Avatar de airweb  
Fecha de Ingreso: enero-2013
Ubicación: En el ciberespacio
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema con programa en C

Vale, tras estar mirandolo durante un tiempo ya lo he conseguido :D

Código:
#include <stdio.h>

int main() {
	int d,m,y, i;
	
	printf("Introduce el día:\n");
	scanf("%d", &d);
	printf("Introduce el mes\n");
	scanf("%d", &m);
	printf("Introduce el año:\n");
	scanf("%d", &y);
	
	switch (m) {
		
		case 1: case 3: case 5: case 7: case 8: case 10: case 12:{
		if (d<31 && d>0) {
			printf ("Es una fecha valida\n");
		}
		else { printf("La fecha introducida no es correcta");}}
		break;
		case 2: 
		if(y%4==0 && d<30 && d>0){
			printf("La fecha es valida y el año es bisiesto\n");
		}
		if (y%4!=0 && d<29 && d>0) {
			printf("La fecha es valida y el año no es bisiesto\n");
		}
		else printf("La fecha no es valida");
		break;
		case 4: case 6: case 9: case 11: 
		if (d<30 && d>0){
				printf("Es una fecha válida");
		}
		else {printf("La fecha introducida no es correcta");}
		break;
		default : printf("La fecha no es correcta");
		break;
		}
		}
Gracias a todos los que me habéis ayudao ;)

Etiquetas: int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:23.