Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 11336

nao lista a idade correta, media de idades e sempre a mesma

$
0
0
Problema 1:depois de listar o novo elemento a sua idade é de 2016, sendo suposto fazer a diferença entre 2016(ano atual) com o ano introduzido na data pedida ao utilizador void Inserir_Pessoas(bd *bdv) { int i = 0; char ano[5],dt[20]; ano[0] = dt[6]; ano[1] = dt[7]; ano[2] = dt[8]; ano[3] = dt[9]; int anoAtual = devolveAno(); char nnome[MAX_NOME], nlocalidade[MAX_CIDADE], ndata[MAX_DATA]; //Variaveis para guardar os Novos Dados pedidos aos utilizador printf("\nIntroduza os dados do novo cidadao\n"); printf("\nNome: "); scanf(" %[^\n]s", nnome); printf("\nData de nascimento:(formato dd-mm-aaaa): "); scanf(" %s", ndata); printf("\nCidade: "); scanf(" %[^\n]s", nlocalidade); //Acrescenta na estrutura uma nova pessoa bdv->vp[bdv->npessoas].codigo = bdv->npessoas + 1; strcpy(bdv->vp[bdv->npessoas].datanasc, ndata); strcpy(bdv->vp[bdv->npessoas].nome, nnome); strcpy(bdv->vp[bdv->npessoas].localidade, nlocalidade); strcpy(ano, ""); bdv->vp[bdv->npessoas].idade = anoAtual - atoi(ano); bdv->npessoas++; printf("\nAdicionado com SUCESSO!\n"); system("pause"); } void listar_tudo(bd * bdv) { int i; for (i = 0; i <bdv->npessoas; i++) { printf("%d, %s, %d %s %s\n", bdv->vp[i].codigo, bdv->vp[i].nome, bdv->vp[i].idade, bdv->vp[i].datanasc, bdv->vp[i].localidade); } }; void completa_struct(bd * bdv) { int cod = 0; char dt[20]; char linha[max_linha]; char loc[MAX]; int res = 0; int i = 0; char ano[5]; int idadePessoa = 0; int anoAtual = devolveAno(); FILE *g = fopen("cod_dataN_cidade.txt", "r"); if (g == NULL) { printf("\nImpossivel abrir o ficheiro"); system("pause"); return; } //enquanto não chegar ao fim do ficheiro, ler while (!feof(g)) { strcpy(ano, ""); fgets(linha, max_linha, g); res = sscanf(linha, "%d %s %[^\n]s", &cod, &dt, &loc); i = procurar_cidadao(*bdv, cod); strcpy(bdv->vp[i].datanasc, dt); strcpy(bdv->vp[i].localidade, loc); ano[0] = dt[6]; ano[1] = dt[7]; ano[2] = dt[8]; ano[3] = dt[9]; bdv->vp[i].idade = anoAtual - atoi(ano); } fclose(g); printf("\t\t\t\t\t\tFicheiros carregado com sucesso!\n\n"); }; int devolveAno() { int ano = 0; time_t now; if (time(&now) != (time_t)(-1)) { struct tm *mytime = localtime(&now); if (mytime) { char year[5]; if (strftime(year, sizeof year, "%Y", mytime)) { ano = atoi(&year); return ano; } } } return 0; }; void preenche(bd * bdv) { FILE *f = fopen("cod_nome.txt", "r"); if (f == NULL) { printf("\nImpossivel abrir o ficheiro"); system("pause"); return; } int numlinhas = 0, res = 0; char linha[max_linha]; //enquanto não chegar ao fim do ficheiro, ler while (!feof(f)) { numlinhas++; fgets(linha, max_linha, f); } fclose(f); bdv->vp = (pessoa *)malloc(numlinhas * sizeof(pessoa)); f = fopen("cod_nome.txt", "r"); if (f == NULL) { printf("\nImpossivel abrir o ficheiro"); system("pause"); return; } float cod = 0; char nomes[200] = "";////// numlinhas = 0, res = 0; //enquanto não chegar ao fim do ficheiro, ler while (!feof(f)) { fgets(linha, max_linha, f); res = sscanf(linha, "%f %[^\n]s", &cod, &nomes); bdv->vp[numlinhas].codigo = cod; strcpy(bdv->vp[numlinhas].nome, nomes); numlinhas++; } bdv->npessoas = numlinhas - 1; fclose(f); }; #define MAX_NOME 200 #define MAX_CIDADE 100 #define MAX_DATA 11 typedef struct { int codigo; char nome[MAX_NOME]; char localidade[MAX_NOME]; char datanasc[11]; int idade; }pessoa; typedef struct { pessoa *vp; int npessoas; }bd; Problema 2: Media de idades é sempre a mesma void media_idade(bd*bdv) { int i, n = 0, soma = 0; float media = 0; char cidade_user[MAX_CIDADE]; printf("Introduza a cidade:\n"); scanf("%s", &cidade_user); for (i = 0; i<bdv->npessoas; i++) { if (stricmp(cidade_user, bdv->vp[i].localidade)) // compara a cidade introduzida pelo utilizador com as do ficheiro { n++; soma = bdv->vp[i].idade+soma; } } media = soma / n; printf("A media de idades da cidade %s e %.2f \n", cidade_user, media); }

Viewing all articles
Browse latest Browse all 11336

Trending Articles