Ver Mensaje Individual
  #4 (permalink)  
Antiguo 13/10/2014, 05:04
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 10 años, 2 meses
Puntos: 49
Respuesta: Introducir mes y mostrar numero dias en C

Cita:
Iniciado por HackID1 Ver Mensaje
Gracias magnifica solución un poco avanzada para lo que aún estoy dando en C . :)

Pero vienen bien para ir viendo nuevas funciones en los códigos.

Al final conseguí la solución de esta forma un poco más simple.
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.    
  5.     char *meses[] = {"enero", "febrero", "marzo", "abril", "mayo", "junio",
  6.                        "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"};
  7.     char mes[12];
  8.     int dias_meses[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  9.     int i ;
  10.    
  11.     printf("Introduzca el nombre del mes: ");
  12.     scanf("%s", mes);
  13.    
  14.     for (i=0; i<12; i++) {
  15.                  /*comparo la respuesta sea igual a 0, es decir que existe el mes introducido*/  
  16.         if ( strcmp ( mes, meses[i] ) == 0 )
  17.             break;  
  18.     }
  19.     /*imprimo el mes, de acuerdo a la posicion donde se encuentra [i] */
  20.     printf("Mes %s tiene %d dias.", mes, dias_meses[i] );
  21.    
  22.     return (0);
  23. }

Saludos y Gracias por tu aporte eduar2083

Una pregunta el return (0) es obligatorio en este programa, es que veo muchas veces lo ponen y otras no.
Si puedes responderme lo agradezco, igual buscare info sobre esto.
Tal como lo tienes, y como ya te indiqué anteriormente, si introduces un mes erróneo, ejemplo emmero, te devolverá el printf "basura" en el número de días. Relee lo que te puse anteriormente respecto a lo fundamental del uso del if, tal como te indicó eferion:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main() {
  5.  
  6.     char *meses[] = {"enero", "febrero", "marzo", "abril", "mayo", "junio",
  7.                        "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"};
  8.     char mes[12];
  9.     int dias_meses[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  10.     int i ;
  11.  
  12.     printf("Introduzca el nombre del mes: ");
  13.     scanf("%s", mes);
  14.  
  15.     for (i=0; i<12; i++) {
  16.  
  17.         if ( strcmp ( mes, meses [i] ) == 0 )
  18.             break;
  19.     }
  20.  /******* ESTO ES FUNDAMENTAL **/
  21.     if ( i == 12 )
  22.         puts ( "Mes incorrecto" ) ;
  23.     else
  24.         printf("Mes %s tiene %d dias.", mes, dias_meses[i] );
  25.     return (0);
  26. }

Y respecto a main, por cuestiones del estándar del C ha de ser una función de tipo "int" con lo que lo correcto es que devuelva un int. Se suele indicar 0 tipo "return 0" , aunque si tienes varias "salidas " del programa yo acostumbro a ir poniendo return 1, etc ( revisa el código que te pasé con el array bidimensional para que lo veas ) así según el valor del return que devuelve al final de ejecutarse el código sé por dónde ha salida. Unido a unos cuantos printf me evita la mayor parte de las veces el usar el debuger. Aunque a fuerza de ser puristas, tal como te indicó Profesor_Falken, lo más correcto sería retornar la constante EXIT_SUCCESS, definida en stdlib.h.

¡¡¡Saluditos!!!