Eu estou fazendo um exercicio em C, em que tenho que imprimir dados de duas pessoas, e comparar qual delas é mais velha, porém na hora de comparar e imprimir o resultado, esta retornando um monte de numeros nada a ver.
Como posso resolver isso ? Segue o codigo!
E quando eu mudo no printf o %d, para %c para mostrar o nome de quem é mais velho, ele mostra só a primeira letra, como faço para resolver isso tambem ?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct{//Data do cliente
int dia;
int mes;
int ano;
}Data;
typedef struct{//Nome e data do cliente
char nome[50];
Data nasc;
}dados_cliente;
void leia_data(Data *n){//Leitor de data
Data k;
printf("\nDia: ");
scanf("%d", &k.dia);
printf("\nMes: ");
scanf("%d", &k.mes);
printf("\nAno: ");
scanf("%d", &k.ano);
n->dia=k.dia; //pesquisar outra forma de fazer isso
n->mes=k.mes;
n->ano=k.ano;
/* Outra forma de fazer a passagem com parâmetro
(*n).dia=k.dia
(*n).mes=k.mes
(*n).ano=k.ano
*/
}
void escreva(dados_cliente x){//Escrita dados cliente
printf("\nOs dados do cliente sao:\n\n");
printf("Nome: %s\n",x.nome);
printf("Data: %d/%d/%d\n\n",x.nasc.dia,x.nasc.mes,x.nasc.ano);
}
dados_cliente mais_velho(dados_cliente a, dados_cliente b){//Comparador qual cliente é mais velho
if (a.nasc.ano < b.nasc.ano)
return a;
if (a.nasc.ano == b.nasc.ano){
if (a.nasc.mes < b.nasc.mes)
return a;
if (a.nasc.mes > b.nasc.mes)
return b;
if (a.nasc.mes == b.nasc.mes){
if (a.nasc.dia < b.nasc.dia)
return a;
if (a.nasc.dia > b.nasc.dia)
return b;
}
}
}
int main()
{
char n1[50], n2[50];
dados_cliente p1, p2;
Data nascimento;
printf("Digite os dados do primeiro cliente:\n\n");
printf("Nome: ");
gets(n1);
leia_data(&nascimento);
strcpy(p1.nome,n1);
p1.nasc=nascimento;
escreva(p1);
getchar();
printf("Digite os dados do segundo cliente:\n\n");
printf("Nome: ");
gets(n2);
leia_data(&nascimento);
strcpy(p2.nome,n2);
p2.nasc=nascimento;
escreva(p2);
getchar();
printf("O cliente mais velho e: %d", mais_velho(p1,p2));
return 0;
}