Boa Noite,
Sou um novo estudante na linguagem C e também neste forum, o qual conheço há algum tempo no entanto esta é a minha primeira participação. Peço desculpa se estou a violar alguma regra.
Deixando a participação de lado, num exercício em aula sobre estruturas o qual achei bastante facil (exemplo em aula), decidi adicionar um pouco de complexidade ao exercício proposto e adicionei vetores/arrays(ainda não sei bem o que lhes chamar). No entanto deparei-me com um erro,o qual não concigo resolver.
Exercício: Pedir dados ao utilizador como, nome, data de nascimento, género, salário. Com estes dados, informe o utilizador da sua idade atual.
Complexidade adicionada: Em vez de ser um utilizador apenas, tentei usar arrays/vetores para que pudesse calcular a idade de vários utilizadores. Usar a data do sistema em véz de data inserida manualmente.
Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[]) {
typedef struct Data {
int dia;
int mes;
int ano;
} DATA;
typedef struct Pessoa {
char nome[40];
DATA dt_nasc;
char genero;
float salario;
} PESSOA;
int i;
printf("Quantas pessoas deseja inserir?\n");
scanf("%d",&i);
printf("\n\n");
PESSOA p1[i];
int n;
for (n=1; n<=i; n++) {
printf("Pessoa n.%d\n\n",n);
printf("Nome:");
scanf(" %39[^\n]%*c",p1[n].nome);
printf("\nData de Nascimento: (formato = dia-mes-ano): ");
scanf("%d-%d-%d",&p1[n].dt_nasc.dia,&p1[n].dt_nasc.mes,&p1[n].dt_nasc.ano);
// printf("\nGenero: ");
// scanf(" %c",&p1[n].genero);
// printf("\nSalário: ");
// scanf("%f",&p1[n].salario);
}
/*
printf("\n\n| N. Pessoa\t|\tNome da Pessoa\t| Data Nascimento\t | Genero\t| Salário\t |");
for (n=1; n<=i ; n++){
printf("\n\t%d\t\t%s\t%d-%d-%d\t%c\t%.2f", n, p1[n].nome,p1[n].dt_nasc.dia,
p1[n].dt_nasc.mes,p1[n].dt_nasc.ano,p1[n].genero, p1[n].salario);
}
*/
time_t t = time(NULL);
struct tm tm = *localtime(&t);
int mes_at = tm.tm_mon+1;
printf("\nData:%d-%d-%d",tm.tm_mday,mes_at,tm.tm_year);
for (n=1; n<=i; n++) {
int idade;
idade=tm.tm_year - p1[i].dt_nasc.ano;
printf("\nIdade: %d", idade);
if (p1[n].dt_nasc.mes < mes_at) {
printf("\n\n\nPessoa n.:%d tem %d anos.\n\n\n",n,idade);
} else if (p1[n].dt_nasc.mes == mes_at && p1[i].dt_nasc.dia < tm.tm_mday) {
printf("\n\n\nPessoa n.:%d tem %d anos.\n\n\n",n,idade-1);
} else if (p1[n].dt_nasc.mes == mes_at && p1[i].dt_nasc.dia == tm.tm_mday) {
printf("\n\n\nPessoa n.:%d tem %d anos hoje. PARABÉNS!\n\n\n",n,idade);
} else{
printf("\n\n\nPessoa n.:%d tem %d anos.\n\n\n",n,idade-1);
}
}
system("Pause");
return 0;
}
Problema: a variável "idade" tem valores anormais. Fazendo com que o resultado final do código seja incorreto.
Peço então que alguém me aponte onde esta o erro que está a causar o problema
Obrigado pelo vosso tempo!
Edit:
Peço desculpa, algum código está comentado, código esse que não é relevante para o problema (penço).
↧