• Sábado 21 de Septiembre de 2024, 03:30

Autor Tema:  Validar Fecha en C (struct)  (Leído 3312 veces)

benekid

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Validar Fecha en C (struct)
« en: Sábado 6 de Febrero de 2010, 18:33 »
0
Saludos compañeros, tengo el siguiente codigo... pero no me funciona ! =S
Creo que lo tengo todo bien... pero no me compila (en Code::Blocks 8.02)

Y la verdad... no se que hacer... les dejo el code:

Código: Text
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5.  
  6. #define es_anio_bisiesto(y)  ((((y)%400)==0)||((((y)%4)==0)&&(((y)%100)!=0)))
  7.  
  8. struct date fecha;
  9.  
  10.  
  11. enum bool
  12. {
  13.     false = 0,
  14.     true = 1
  15. };
  16.  
  17. enum Mes
  18. {
  19.    Enero = 1,
  20.    Febrero = 2,
  21.    Marzo = 3,
  22.    Abril = 4,
  23.    Mayo = 5,
  24.    Junio = 6,
  25.    Julio = 7,
  26.    Agosto = 8,
  27.    Septiembre = 9,
  28.    Octubre = 10,
  29.    Noviembre = 11,
  30.    Diciembre = 12
  31. };
  32.  
  33.  
  34. int dias_en_el_mes (int y, int m)
  35. {
  36.     const int dias[12] = { 31, 28, 31, 30, 31, 30,
  37.                            31, 31, 30, 31, 30, 31 };
  38.    int resultado;
  39.  
  40.    resultado = dias[m-1];
  41.  
  42.    if ( m == Febrero && es_anio_bisiesto ( y ) )
  43.       resultado++;
  44.  
  45.    return resultado;
  46. }
  47.  
  48.  
  49. bool es_fecha_valida ( struct date fecha )
  50. {
  51.    if ( fecha.da_mon < Enero || fecha.da_mon > Diciembre )
  52.       return false;
  53.  
  54.    if ( fecha.da_day < 0 || fecha.da_day >=
  55.              dias_en_el_mes ( fecha.da_year, fecha.da_mon ) )
  56.       return false;
  57.  
  58.    return true;
  59. }
  60.  
  61. void main()
  62. {
  63.    struct date fecha1, fecha2;
  64.  
  65.    fecha1.da_day=1;
  66.    fecha1.da_mon=6;
  67.    fecha1.da_year=2006;
  68.  
  69.    fecha2.da_day=30;
  70.    fecha2.da_mon=2;
  71.    fecha2.da_year=2006;
  72.  
  73.    clrscr();
  74.  
  75.    if(es_fecha_valida(fecha1))
  76.       printf("La fecha1 es validan");
  77.    else
  78.       printf("La fecha1 NO es validan");
  79.  
  80.    if(es_fecha_valida(fecha2))
  81.       printf("La fecha2 es valida");
  82.    else
  83.       printf("La fecha2 NO es valida");
  84.  
  85.    getch();
  86. }
  87.  

Saludos y gracias

Keiga

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Validar Fecha en C (struct)
« Respuesta #1 en: Sábado 6 de Febrero de 2010, 19:41 »
0
tienes varios errores, pero solo vi uno xD
al final del programa tus if no tienen llaves "{ }"

benekid

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Validar Fecha en C (struct)
« Respuesta #2 en: Sábado 6 de Febrero de 2010, 21:07 »
0
Muchas gracias por el esfuerzo...ya me ha funcionado y ahora tengo la siguiente duda:
Quiero pasar estos datos (dados que son int) a char, dado que los quiero meter en otra estructura diferente

y tengo esto:

Código: Text
  1. struct data info;
  2.  
  3. itoa (info.dia,10);
  4. itoa (info.mes,10);
  5. itoa (info.ano,10);
  6.  
  7. info_datos[i].dia=info.dia;
  8. info_datos[i].mes=info.mes;
  9. info_datos[i].ano=info.ano;
  10.  

pero no se que estoy haciendo mal... creo que es por la funcion itoa

(he cambiado los nombres respecto a la funcion de arriba, pero hace lo mismo)

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Validar Fecha en C (struct)
« Respuesta #3 en: Domingo 7 de Febrero de 2010, 01:58 »
0
la verdad no se que tipo de datos tienes en struct data ya que no muestras la estructura, pero aun asi, me parece que te falta un parametro en la funcion itoa() para que te compile correctamente, te dejo un enlace a la documentacion:

http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================