Hola a todos, he encontrado bastante información al respecto, así que disculpas por no ser más despierta, pero no le encuentro solución por más que intente.
Tengo que calcular la edad de un usuario en una función y lo que tengo es una función que me devuelve la fecha de nacimiento del mismo.
Así:
fecha ingresoFechanacimiento()
{
fecha fechanac;
printf("\nIngrese Fecha de Nacimiento dd/mm/aaaa: ");
scanf("%d/%d/%d",&fechanac.dia,&fechanac.mes, &fechanac.año);
return fechanac;
}
Básicamente lo que quiero es hacer eso, otra función para mostrar la edad a partir de la función fecha de nacimiento. Pienso que quizás tendria que sacar solo el año de la función fecha de nacimiento, pero no me sale...
Desde ya, gracias!
te dejo este ejemplo, no es la mejor implementacion pero creo que es lo que andas buscando.
#include <stdio.h>
typedef struct Fecha_Struct{
int dia;
int mes;
int año;
}Fecha;
Fecha ingresoFechanacimiento(void){
Fecha fechanac;
printf("\nIngrese Fecha de Nacimiento dd/mm/aaaa: ");
scanf("%d %d %d",&fechanac.dia,&fechanac.mes, &fechanac.año);
return fechanac;
}
void calcularEdad(void){
Fecha f=ingresoFechanacimiento();
int edad=2015-f.año;
printf("su edad es %d",edad);
}
int main()
{
calcularEdad();
printf("\npresione una tecla para cerrar");
getchar();
getchar();
return 0;
}
@dragonlady, tal como te puso @crack81, la vía de saber la edad de alguien a partir de la fecha de nacimiento, es simplemente restándole a la fecha actual la fecha de nacimiento. Digo fecha, pues hay que tener en cuenta también el mes y los días, pues puedes haber nacido el 3 de septiembre de 1990 y hoy es 10 de julio de 2015. Luego la resta de 2015 - 1990 daría 25, pero todavía no habría cumplido los 25 años, así que tienes que tener en cuenta esto también.
Si tienes algún problema implementando esto, puedes preguntar y estaremos más que dispuestos a ayudarte.
Salu2s
PD: En el código que puso @crack81, además de que deberías comprobar lo de los meses y días, yo, en vez de poner:
int edad=2015-f.año;
Tuviera una función que me sacara del sistema la fecha actual y utilizara el año de la fecha actual en la resta.
Cita de: DarK_FirefoX en 11 Julio 2015, 03:07 AM
PD: En el código que puso @crack81, además de que deberías comprobar lo de los meses y días, yo, en vez de poner:
Una solución a esto seria
#include <stdio.h>
#include <time.h>
typedef struct
{
int dia;
int mes;
int año;
} fecha;
int calcular_edad(fecha datos)
{
time_t t = time(NULL);
struct tm tm = *localtime(&t);
int a = ((tm.tm_year + 1900) * 100 + tm.tm_mon + 1) * 100 + tm.tm_mday;
int b = (datos.año * 100 + datos.mes) * 100 + datos.dia;
return (a - b) / 10000;
}
int main(void)
{
fecha datos;
printf("\nIngrese Fecha de Nacimiento dd/mm/aaaa: ");
scanf("%d/%d/%d",&datos.dia,&datos.mes, &datos.año);
printf("Su edad es %d\n", calcular_edad(datos));
return(0);
}
Saludos
una pequeña recomendación a los que publicaron codigo... si usan c++, usen las librerías del standard de c++ y no de c
#include <cstdio>
#include <ctime>
Hola a todos, muchas gracias por contestar. El único que no entendí mucho fue el
Citarint calcular_edad(fecha datos)
{
time_t t = time(NULL);
struct tm tm = *localtime(&t);
int a = ((tm.tm_year + 1900) * 100 + tm.tm_mon + 1) * 100 + tm.tm_mday;
int b = (datos.año * 100 + datos.mes) * 100 + datos.dia;
return (a - b) / 10000;
}
Y si... me serviría más poder saber aparte del año si la persona ya cumplió o no, por eso estaría bueno involucrar mes y día, para saber la edad realmente.
Igual lo dejé sencillo con algo que por lo menos pudiese entender, y el problema es que no se bien como arreglar este error. Yo se que no puedo retornar un dato de tipo int si la funcion es de tipo fecha, pero no se como lo puedo arreglar:
fecha calcularEdad()
{
fecha f = ingresoFechanacimiento();
int edad = 2015 - f.año;
return edad;
}
error: incompatible types when assigning to type 'fecha' from type 'int'
pues si vas a retonar un int pues cambias el tipo de retorno
int calcularEdad()
{
fecha f = ingresoFechanacimiento();
int edad = 2015 - f.año;
return edad;
}
Hola! Ya intenté y no me funciona eso, me tira toda una serie de errores:
In function 'calcularEdad':|
|809|error: 'fecha' has no member named 'a'|
|809|error: stray '\361' in program|
|809|error: expected ',' or ';' before 'o'|
|808|warning: variable 'f' set but not used [-Wunused-but-set-variable]|
f.año
Es preferible que no uses eñes, ni acentos. En general, solo usa las letras del alfabeto inglés para nombrar campos, funciones y variables.
Y ahora, para que leas el error:
Citar|809|error: 'fecha' has no member named 'a'|
|809|error: stray '\361' in program|
|809|error: expected ',' or ';' before 'o'|
El primero, está tomandose lo q escribiste como f.a. La ñ, es el segundo error, "stray \361". El tercer error, dice qe la "o" que hay después de la eñe, pues no tiene sentido ahí. Te dice que esperaba un ';', para acabar la instrucción.
Gracias a todos, ahora si lo solucioné. Sigo con problemas de distracción.
#include <stdio.h>
#include <time.h>
typedef struct
{
int dia;
int mes;
int año;
} fecha;
int calcular_edad(fecha datos)
{
time_t t = time(NULL);
struct tm tm = *localtime(&t);
int a = ((tm.tm_year + 1900) * 100 + tm.tm_mon + 1) * 100 + tm.tm_mday;
int b = (datos.año * 100 + datos.mes) * 100 + datos.dia;
return (a - b) / 10000;
}
int main(void)
{
fecha datos;
printf("\nIngrese Fecha de Nacimiento dd/mm/aaaa: ");
scanf("%d/%d/%d",&datos.dia,&datos.mes, &datos.año);
printf("Su edad es %d\n", calcular_edad(datos));
return(0);
}
me gustaria que me ayudaran, este codigo sirvio pero necesito solo utilizarlo con cout y cin por favor
GRACIAS POR EL CODIGO PERO ME AYUDAN UTILIZANDO COUT Y CIN POR FAVOR. GRACIASCita de: Coper en 11 Julio 2015, 06:12 AM
Una solución a esto seria
#include <stdio.h>
#include <time.h>
typedef struct
{
int dia;
int mes;
int año;
} fecha;
int calcular_edad(fecha datos)
{
time_t t = time(NULL);
struct tm tm = *localtime(&t);
int a = ((tm.tm_year + 1900) * 100 + tm.tm_mon + 1) * 100 + tm.tm_mday;
int b = (datos.año * 100 + datos.mes) * 100 + datos.dia;
return (a - b) / 10000;
}
int main(void)
{
fecha datos;
printf("\nIngrese Fecha de Nacimiento dd/mm/aaaa: ");
scanf("%d/%d/%d",&datos.dia,&datos.mes, &datos.año);
printf("Su edad es %d\n", calcular_edad(datos));
return(0);
}
Saludos
Cita de: WOLFMANX en 28 Septiembre 2015, 00:00 AM
GRACIAS POR EL CODIGO PERO ME AYUDAN UTILIZANDO COUT Y CIN POR FAVOR. GRACIAS
Para usar cout y cin tienes que utilizar un espacio de nombres después de los includes pon
using namespace std; y también
#include <iostream>
cout << "Ingresa Fecha de Nacimiento" << endl;
cout << "Dia = ";
cin >> datos.dia;
.....
cout << "Su edad es " << calcular_edad(datos);