Calcular la edad mediante fecha actual en C

publicado por: Anonymous

He realizado un código simple para guardas datos de personas en una estructura y se me a ocurrido, sacar la edad de la persona mediante el método fechaActual() restarlo del algún modo con la fecha de nacimiento introducida..

Codigo:

struct fecha{
    int dia;
    int mes;
    int anio;
}fecha;

struct datosPersonales{
    char DNI[10];
    char nombre[30];
    char apellidos[50];
    struct fecha fechaNacimiento;
    int seguridadSocial;
}persona[2];

//Prototipos de funciones
void introducirDatos();
void visualizarDatos();
void fechaActual();

int main()
{
    printf("DATOS DE PERSONAS EN ESTRUCTURASnn");
    introducirDatos();
    system("CLS");
    printf("DATOS INTRODUCIDOSnn");
    visualizarDatos();
    fechaActual();

    return 0;
}

void introducirDatos()
{
    for(int i=0;i<2;i++)
    {
        fflush(stdin);
        printf("Datos de la %d personan",i+1);
        printf("DNI: ");
        gets(persona[i].DNI);
        printf("Nombre: ");
        gets(persona[i].nombre);
        printf("Apellidos: ");
        gets(persona[i].apellidos);
        printf("Fecha de nacimienton");
        printf("Dia: ");
        scanf("%d",&persona[i].fechaNacimiento.dia);
        printf("Mes: ");
        scanf("%d",&persona[i].fechaNacimiento.mes);
        printf("A%co: ",164);
        scanf("%d",&persona[i].fechaNacimiento.anio);
        printf("Numero de la Seguridad Social: ");
        scanf("%d",&persona[i].seguridadSocial);
        printf("n");
    }
}

void visualizarDatos()
{
     for(int i=0;i<2;i++)
     {
        printf("Datos de la %d personan",i+1);
        printf("DNI = %sn",persona[i].DNI);
        printf("Nombre = %sn",persona[i].nombre);
        printf("Apellidos = %sn",persona[i].apellidos);
        printf("Fecha de nacimiento = %d/%d/%dn",persona[i].fechaNacimiento.dia,persona[i].fechaNacimiento.mes,
                                            persona[i].fechaNacimiento.anio);                               
        printf("Numero de la Seguridad Social = %dnn",persona[i].seguridadSocial);                                        
    }
}

void fechaActual()
{
    time_t tiempo = time(0);
    struct tm *tlocal = localtime(&tiempo);
    char output[128];
    strftime(output,128,"%d/%m/%y",tlocal);
    printf("%sn",output);
 }

solución

La fecha de nacimiento veo que ya puedes cogerla en

persona[i].fechaNacimiento.dia
persona[i].fechaNacimiento.mes
persona[i].fechaNacimiento.anio

Y con la funcion fechaActual() ya tienes la fecha actual. Simplemente compara las dos fechas para calcular la diferencia del siguiente modo: Difference between two dates

En el ejemplo también recoge la fecha en 3 partes (dia, mes y año), por lo que te facilita la adaptación a tu código.

  //c_date representa "Current date" o dia actual
  //diferencia representa la diferencia entre las dos fechas 

  //Si el dia de la fecha actual es mayor o igual al de nacimiento > calculamos diferencia
  if(c_date.dd>=persona[i].fechaNacimiento.dia)
    diferencia.dd = c_date.dd-persona[i].fechaNacimiento.dia;
  //Por lo contrario añadimos 30 dias pero restamos 1 mes y calculamos diferencia
  else
  {
      c_date.dd+=30;
      c_date.mm-=1;
      diferencia.dd = c_date.dd-persona[i].fechaNacimiento.dia;
   }
   //Lo mismo con los meses
   if(c_date.mm>=persona[i].fechaNacimiento.mes)
     diferencia.mm = c_date.mm-persona[i].fechaNacimiento.mes;
   else
   {
      c_date.mm+=12;
      c_date.yy-=1;
      diferencia.mm = c_date.dd-persona[i].fechaNacimiento.mes;
   }
   //Igual con los años
   diferencia.yy = c_date.yy-persona[i].fechaNacimiento.anio;
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *