Olá amigos, tudo bem?
Vou explicar de maneira resumida essa parte do código que estou tendo problemas.
Na funcão MostraIMC (), eu preciso pegar os nomes e valores de IMC de pacientes, dados esses salvos em um arquivo .txt e, ordena-los em ordem alfabética. A variável max, recebe o valor retornado da função Contar (), que lê a quantidade de linhas que o arquivo possui e retorna esse valor. Ai, eu atribuo ao vetor de struct chamado ordenacao, o valor da variável max. Assim, consigo alocar todos os valores cadastrados para que sejam ordenados. O problema é: ele ordena os dados, porém, na hora de mostra-los, ele mostra apenas o 1º nome de paciente e o 1º valor de IMC, deixando os outros em branco.
Além do problema citado acima, a função MostraDiabeticos (), que deveria mostrar os nomes dos pacientes diabéticos (nesse caso, representado por glicemia > 120), também não está funcionando como deveria, uma vez que ela sempre mostra a mensagem de que não há pacientes diabéticos.
Obrigado desde já. Segue código:
int Contar () {
int numreg = 0;
pont_cadastro = fopen ("Cadastro_Pacientes.txt", "r");
while ((fread(&dados_pacientes, sizeof(dados_pacientes), 1, pont_cadastro)) == 1) {
numreg++;
}
fclose (pont_cadastro);
return numreg;
}
void MostraIMC () {
int max = Contar ();
int i = 0, j = 0;
struct dados auxiliar;
struct dados ordenacao[max];
if ((pont_calcIMC = fopen ("CalculoIMC.txt", "r")) == NULL) {
printf("Erro ao abrir arquivo de IMC.\n");
printf("Voce deseja cadastrar algum paciente para calcular o IMC? <s/n>\n");
resposta = getche();
if (toupper(resposta) == 'S') {
CadastroPaciente ();
}
else {
printf("Voce sera redirecionado para o Menu\n");
system ("pause");
Menu ();
}
}
else {
while ((fscanf(pont_calcIMC, "%s %f", dados_pacientes.nome_paciente, &dados_pacientes.imc)) != EOF) {
strcpy (ordenacao[i].nome_paciente, dados_pacientes.nome_paciente);
ordenacao[i].imc = dados_pacientes.imc;
i++;
}
for (i = 0; i < max; i++) {
for (j = i+1; j < max; j++) {
if (strcmp (ordenacao[i].nome_paciente, ordenacao[j].nome_paciente) > 0) {
strcpy (ordenacao[i].nome_paciente, auxiliar.nome_paciente);
strcpy (ordenacao[i].nome_paciente, ordenacao[j].nome_paciente);
strcpy (ordenacao[j].nome_paciente, auxiliar.nome_paciente);
ordenacao[i].imc = auxiliar.imc;
ordenacao[i].imc = ordenacao[j].imc;
ordenacao[j].imc = auxiliar.imc;
}
}
}
for (i = 0; i < max; i++) {
printf("Nome Paciente: %s\nValor IMC: %.2f\n\n", ordenacao[i].nome_paciente, ordenacao[i].imc);
}
}
fclose (pont_calcIMC);
system("pause");
printf("Voce sera redirecionado para o Menu\n");
system("pause");
}
void MostraDiabeticos () {
if ((pont_cadastro = fopen ("Cadastro_Pacientes.txt", "r")) == NULL) {
printf("Erro ao abrir arquivo de Pacientes Cadastrados.\n");
printf("Voce deseja cadastrar algum paciente? <s/n>\n");
resposta = getche();
if (toupper(resposta) == 'S') {
CadastroPaciente ();
}
else {
printf("Voce sera redirecionado para o Menu\n");
system ("pause");
Menu ();
}
}
else {
int max = Contar ();
int contador = 0, i = 0;
struct dados diabeticos[max];
while (fread(&dados_pacientes, sizeof (dados_pacientes), 1, pont_cadastro) == 1) {
strcpy (diabeticos[i].nome_paciente, dados_pacientes.nome_paciente);
diabeticos[i].glicemia = dados_pacientes.glicemia;
if (diabeticos[i].glicemia > 120) {
contador++;
}
i++;
}
if (contador == 0) {
printf("Nao ha pacientes diabeticos.\n");
}
else {
printf("Os pacientes diabeticos sao: \n");
for (i = 0; i < max; i++) {
if (diabeticos[i].glicemia > 120) {
printf("%s\n", diabeticos[i].nome_paciente);
}
}
}
}
fclose (pont_cadastro);
system("pause");
printf("\nVoce sera redirecionado para o Menu\n");
system("pause");
}