我的程序按系统中注册人员的姓名进行搜索。例如,当我按“ Fu”搜索时,该程序将显示名称中具有“ Fu”模式的用户的所有信息。主要问题是该程序正在检测有多少人在搜索中设置了默认设置,但它显示的是重复信息。我想我是用错误的方式处理文件的。
Use the people.dat file for you to test the program
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct pes Pes;
struct pes {
int dia;
int mes;
int ano;
int numero_uf;
int uf;
char nome[101];
char enderCid[101];
char enderBair[101];
char numCasa[51];
char cpf[12];
char tel[13];
char email[31];
char login[51];
char senha[51];
char c;
char status;
};
void exibePessoasEncontradas(Pes** usuarios_encontrados, int quantidade);
int main (void) {
FILE* fp;
Pes* cadastro_pess;
Pes** usuarios_encontrados;
int i;
int aux;
int tam;
int achou;
char procurado[100];
char resp;
fp = fopen("pessoas.dat", "rb");
if (fp == NULL) {
printf("Ops! Ocorreu um erro na abertura do arquivo!\n");
printf("Não é possível continuar o programa...\n");
exit(1);
}
system("clear");
printf("\n =================================");
printf("\n | | | Programa Biblioteca | | |");
printf("\n =================================");
printf("\n >>> BUSCA PESSOA <<<");
printf("\n =================================");
printf("\n");
printf(" Informe o nome da pessoa a ser buscada: ");
scanf(" %100[^\n]", procurado);
i = 0;
aux = 0;
achou = 0;
cadastro_pess = (Pes*) malloc(sizeof(Pes));
while(fread(cadastro_pess, sizeof(Pes), 1, fp)) {
i += 1;
}
fclose(fp);
FILE* fp2;
fp2 = fopen("pessoas.dat", "rb");
if (fp2 == NULL) {
printf("Ops! Ocorreu um erro na abertura do arquivo!\n");
printf("Não é possível continuar o programa...\n");
exit(1);
}
tam = i;
usuarios_encontrados = (Pes**) malloc(tam * sizeof(Pes*));
char *ret;
while(fread(cadastro_pess, sizeof(Pes), 1, fp2)) {
for(int j = 0; j < strlen(procurado); j++) {
ret = strchr(cadastro_pess->nome, procurado[j]);
if((ret != NULL) && (cadastro_pess->status == '1')) {
usuarios_encontrados[aux] = cadastro_pess;
aux += 1;
achou = 1;
break;
// continue;
}
}
}
fclose(fp2);
if (achou) {
exibePessoasEncontradas(usuarios_encontrados, aux);
} else {
printf("\n %s não foi encontrado(a)...\n", procurado);
}
printf("\n Digite algo e tecle ENTER para continuar.\n\n");
scanf(" %c", &resp);
free(cadastro_pess);
return 0;
}
void exibePessoasEncontradas(Pes** usuarios_encontrados, int quantidade) {
for(int k = 0; k < quantidade; k++) {
int dia = usuarios_encontrados[k]->dia;
int mes = usuarios_encontrados[k]->mes;
int ano = usuarios_encontrados[k]->ano;
int numero_uf = usuarios_encontrados[k]->uf;
printf("\n\n Nome: %s \n", usuarios_encontrados[k]->nome);
printf(" CPF: %c%c%c.%c%c%c.%c%c%c-%c%c \n", usuarios_encontrados[k]->cpf[0], usuarios_encontrados[k]->cpf[1], usuarios_encontrados[k]->cpf[2], usuarios_encontrados[k]->cpf[3], usuarios_encontrados[k]->cpf[4], usuarios_encontrados[k]->cpf[5], usuarios_encontrados[k]->cpf[6], usuarios_encontrados[k]->cpf[7], usuarios_encontrados[k]->cpf[8], usuarios_encontrados[k]->cpf[9], usuarios_encontrados[k]->cpf[10]);
printf(" Data de nascimento: %d/%d/%d \n", dia, mes, ano);
printf(" Email: %s \n", usuarios_encontrados[k]->email);
printf(" Login: %s \n", usuarios_encontrados[k]->login);
printf(" Senha: %s \n", usuarios_encontrados[k]->senha);
printf(" Telefone: %s \n", usuarios_encontrados[k]->tel);
if(numero_uf == 1) {
char nome_uf[] = "Acre";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 2) {
char nome_uf[] = "Alagoas";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 3) {
char nome_uf[] = "Amapá";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 4) {
char nome_uf[] = "Amazonas";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 5) {
char nome_uf[] = "Bahia";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 6) {
char nome_uf[] = "Ceará";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 7) {
char nome_uf[] = "Distrito Federal";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 8) {
char nome_uf[] = "Espírito Santo";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 9) {
char nome_uf[] = "Goiás";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 10) {
char nome_uf[] = "Maranhão";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 11) {
char nome_uf[] = "Mato Grosso";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 12) {
char nome_uf[] = "Mato Grosso do Sul";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 13) {
char nome_uf[] = "Minas Gerais";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 14) {
char nome_uf[] = "Pará";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 15) {
char nome_uf[] = "Paraíba";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 16) {
char nome_uf[] = "Paraná";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 17) {
char nome_uf[] = "Pernambuco";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 18) {
char nome_uf[] = "Piauí";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 19) {
char nome_uf[] = "Rio de Janeiro";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 20) {
char nome_uf[] = "Rio Grande do Norte";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 21) {
char nome_uf[] = "Rio Grande do Sul";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 22) {
char nome_uf[] = "Rondônia";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 23) {
char nome_uf[] = "Roraima";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 24) {
char nome_uf[] = "Santa Catarina";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 25) {
char nome_uf[] = "São Paulo";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 26) {
char nome_uf[] = "Sergipe";
printf(" Estado: %s \n", nome_uf);
} else if(numero_uf == 27) {
char nome_uf[] = "Tocantins";
printf(" Estado: %s \n", nome_uf);
}
printf(" Cidade: %s \n", usuarios_encontrados[k]->enderCid);
printf(" Bairro: %s \n", usuarios_encontrados[k]->enderBair);
printf(" Numero da casa: %s \n", usuarios_encontrados[k]->numCasa);
printf("\n");
}
}