Calculate the age by current date in C

1

I have made a simple code to keep data of people in a structure and it occurred to me, to get the age of the person using the datedate method () subtract it in some way with the date of birth introduced ..

Code:

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 ESTRUCTURAS\n\n");
    introducirDatos();
    system("CLS");
    printf("DATOS INTRODUCIDOS\n\n");
    visualizarDatos();
    fechaActual();

    return 0;
}

void introducirDatos()
{
    for(int i=0;i<2;i++)
    {
        fflush(stdin);
        printf("Datos de la %d persona\n",i+1);
        printf("DNI: ");
        gets(persona[i].DNI);
        printf("Nombre: ");
        gets(persona[i].nombre);
        printf("Apellidos: ");
        gets(persona[i].apellidos);
        printf("Fecha de nacimiento\n");
        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 persona\n",i+1);
        printf("DNI = %s\n",persona[i].DNI);
        printf("Nombre = %s\n",persona[i].nombre);
        printf("Apellidos = %s\n",persona[i].apellidos);
        printf("Fecha de nacimiento = %d/%d/%d\n",persona[i].fechaNacimiento.dia,persona[i].fechaNacimiento.mes,
                                            persona[i].fechaNacimiento.anio);                               
        printf("Numero de la Seguridad Social = %d\n\n",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("%s\n",output);
 }
    
asked by Mario Guiber 29.08.2017 в 12:29
source

1 answer

2

The date of birth I see that you can already pick it up in

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

And with the function currentDate () you already have the current date. Just compare the two dates to calculate the difference as follows: Difference between two dates

The example also includes the date in 3 parts (day, month and year), so it makes it easier for you to adapt to your code.

  //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;
    
answered by 29.08.2017 / 13:28
source