Erro ao imprimir dados armazenados na memória em C
Olá Senhores , estou aqui para um help dos senhores mais experientes, e estou com um problema em meu código, pois desenvolvi um menu em C, e esta funcionando praticamente em tudo, e só não consegui imprimi todos os dados na tela ..
Por exemplo, se eu cadastrar mais de 1 aluno em meu sistema eu consigo visualizar de boa buscando pela matrícula, mas se eu pedi para listar todos os alunos cadastrados, ele só busca o primeiro e os outros ele não retorna, segue abaixo o código....
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
struct cadastro
{
int matricula;
char aluno[50];
char disciplina1[50];
char disciplina2[50];
char disciplina3[50];
float nota1;
float nota2;
float nota3;
float nota4;
float nota5;
float nota6;
float nota7;
float nota8;
float nota9;
int codaux[20];
int vazio;
int cod;
};
struct cadastro registros[50];
void flush_in(){
int ch;
while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){}
}//Funçoes que serao usadas
void cadastrar(int cod, int pos);
//Funçao para consulta
void listar( void );
//Funçao para consulta
void consultar( void );
//Funçao para exibir relatorio
int relatorio( void );
//Função para verificar posição
int verifica_pos( void );
//Função para verificar codigo
int verifica_cod( int cod );
//Função para verificar posição do codigo
int verifica_pos( void );
//Função para excluir cadastro
void excluir( void );
int main(void){
int op = 0,senha,posicao, matricula, retorno;
printf("######### SISTEMA DE NOTAS DE ALUNOS: ##############\n\n ");
do
{
printf(" DIGITE UMA SENHA : ");
scanf ("%d",&senha);
if(senha!=1)
{
printf("Senha incorreta. Tente Novamente \n\n");
system("pause");
system("cls");
}
}
while(senha!=1);
while(op!=5){
system("cls");
printf ("\n\n *** MENU DE NOTAS DE ALUNO: ***\n\n ",setlocale(LC_ALL,""));
printf ("| 1 - Matrícula do Aluno |\n",setlocale(LC_ALL,""));
printf (" | 2 - Lista de Alunos |\n",setlocale(LC_ALL,""));
printf (" | 3 - Listar dados do Aluno |\n",setlocale(LC_ALL,""));
printf (" | 4 - Pesquisar por Matrícula |\n",setlocale(LC_ALL,""));
printf (" | 5 - Sair |\n",setlocale(LC_ALL,""));
scanf ("%d", &op);switch(op)
{
case 1: // CADASTRAR
{
posicao=verifica_pos();
if ( posicao != -1 )
{
printf("\nDigite o número da matrícula para o aluno : ");
scanf("%d",&matricula);
fflush(stdin);
retorno = verifica_cod( matricula);
if ( retorno == 1 )
cadastrar( matricula, posicao );
else
printf("\nCodigo ja existente\n");
system ("pause");
}
else
printf("\nNao e possivel realizar mais cadastros!\n");
break;
}
case 2: // LISTAR
{
listar();
break;
}
case 3:// CONSULTAR
{
consultar();
break;
}
case 4:// EXCLUIR
{
excluir();
system ("pause");
break;
} // SAIR
case 5:
{
printf("\n Saindo do Sistema - Tchau");
getchar();
return 0;
break;
}
default :// OPÇÃO INVÁLIDA
printf("Opcão Inválida",setlocale(LC_ALL,""));
break;
}
}
getchar();
}
// FUNÇAO CADASTRAR
void cadastrar( int cod, int pos )
{
pos = verifica_pos();
registros[pos].cod = cod;
printf("\nDigite Nome do Aluno: ");
scanf("%s",®istros[pos].aluno);
printf("\nDigite a 1º Disciplina : ");
scanf("%s",®istros[pos].disciplina1);
flush_in();
printf("\nNota do 1º Bimestre: ");
scanf("%f",®istros[pos].nota1);
fflush(stdin);
printf("\nNota do 2º Bimestre: ");
scanf("%f",®istros[pos].nota2);
fflush(stdin);
printf("\nNota do 3º Bimestre: ");
scanf("%f",®istros[pos].nota3);
printf("\nDigite a 2º Disciplina : ");
scanf("%s",®istros[pos].disciplina2);
fflush(stdin);
printf("\nNota do 1º Bimestre: ");
scanf("%f",®istros[pos].nota4);
fflush(stdin);
printf("\nNota do 2º Bimestre: ");
scanf("%f",®istros[pos].nota5);
fflush(stdin);
printf("\nNota do 3º Bimestre: ");
scanf("%f",®istros[pos].nota6);
printf("\nDigite a 3º Disciplina : ",setlocale(LC_ALL,""));
scanf("%s",®istros[pos].disciplina3);
fflush(stdin);
printf("\nNota do 1º Bimestre: ",setlocale(LC_ALL,""));
scanf("%f",®istros[pos].nota7);
fflush(stdin);
printf("\nNota do 2º Bimestre: ",setlocale(LC_ALL,""));
scanf("%f",®istros[pos].nota8);
fflush(stdin);
printf("\nNota do 3º Bimestre: ",setlocale(LC_ALL,""));
scanf("%f",®istros[pos].nota9);
registros[pos].vazio = 1;
printf("\nCadastro Realizado com Sucesso!\n\n",setlocale(LC_ALL,""));
getchar();
system("cls");
} //Final da Função Cadastrar
// FUNÇAO LISTAR
void listar()
{
setlocale(LC_ALL," ");
int i,j,cod,posicao,pos, retorno;
pos = verifica_pos();
for (i=0; i<pos; i++ )
{
if (registros[i].vazio==1)
{
printf("\n\n\nRESULTADO DA BUSCA: \n\n");
printf("\nForam encontrado (os) Aluno (s) : %d\n" ,registros[i].cod);
printf("**********************************************\n\n");
printf("\nMatrícula : %d\n",registros[i].cod);
printf("\nNome do Aluno é: %s\n" ,registros[i].aluno);
printf("\nDisciplina : %s\n",registros[i].disciplina1);
printf("\nNota do 1º Bimestre: %.1f\t",registros[i].nota1);
printf("\nNota do 2º Bimestre: %.1f\t",registros[i].nota1);
printf("\nNota do 3º Bimestre: %.1f\n",registros[i].nota3);
printf("\nDisciplina : %s\n",registros[i].disciplina2);
printf("\nNota do 1º Bimestre: %.1f\t",registros[i].nota4);
printf("\nNota do 2º Bimestre: %.1f\t",registros[i].nota5);
printf("\nNota do 3º Bimestre: %.1f\n",registros[i].nota6);
printf("\nDisciplina : %s\n",registros[i].disciplina3);
printf("\nNota do 1º Bimestre: %.1f\t",registros[i].nota7);
printf("\nNota do 2º Bimestre: %.1f\t",registros[i].nota8);
printf("\nNota do 3º Bimestre: %.1f\n",registros[i].nota9);
printf("\n\n");
printf("**********************************************\n\n");
system("pause");
getchar();
break;
}
i++;
}
if (registros[i].vazio==0)
{
printf("\nCódigo não encontrado\n\n");
system("pause");
system("cls");
return ;
}
}
//FUNÇÃO CONSULTAR
void consultar( void )
{
int cont = 0, cod,posicao, retorno,codaux;
printf("\nEntre com o código: ",setlocale(LC_ALL,""));
scanf("%d",&cod);
system("cls");
while ( cont <= 100 )
{
if (registros[cont].cod==cod)
{
if (registros[cont].vazio==1)
{ printf("\n\n\nRESULTADO DA BUSCA: \n\n");
printf("\nForam encontrado (os) Aluno (s) : %d\n" ,registros[cont].cod);
printf("**********************************************\n\n");
printf("\nMatrícula : %d\n",registros[cont].cod);
printf("\nNome do Aluno é: %s\n" ,registros[cont].aluno);
printf("\nDisciplina : %s\n",registros[cont].disciplina1);
printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota1);
printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota1);
printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota3);
printf("\nDisciplina : %s\n",registros[cont].disciplina2);
printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota4);
printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota5);
printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota6);
printf("\nDisciplina : %s\n",registros[cont].disciplina3);
printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota7);
printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota8);
printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota9);
printf("\n\n");
system ("pause");
system("cls");
break;
}
}
cont++;
if (registros[cont].vazio==0)
{
printf("\nCódigo não encontrado\n\n",setlocale(LC_ALL,""));
system("pause");
system("cls");
return ;
}
}
}
//FUNÇÃO VERIFICA POSIÇÃO
int verifica_pos( void )
{
int cont = 0;
while ( cont <= 100 )
{
if ( registros[cont].vazio == 0 )
return(cont);
cont++;
}
return(-1);
}
//FUNÇÃO ZERAR
void zerar( void )
{
int cont;
for ( cont = 0; cont <= 100; cont++ )
registros[cont].vazio = 0;
}
//FUNÇÃO VERIFICA CODIGO
int verifica_cod( int cod )
{
int cont = 0;
while ( cont <= 100 )
{
if ( registros[cont].cod == cod )
return(0);
cont++;
}
return(1);
}
//FUNÇÃO EXCLUIR
void excluir( void )
{
int cod, cont = 0;
char resp;
printf("\nEntre com o código do registro que deseja excluir\n",setlocale(LC_ALL,""));
scanf("%d", &cod );
while ( cont <= 100 )
{
if ( registros[cont].cod == cod )
{ // FALTOU
if ( registros[cont].vazio == 1 )
{
printf("\n\n\nRESULTADO DA BUSCA: \n\n");
printf("\nForam encontrado (os) Aluno (s) : %d\n" ,registros[cont].cod);
printf("**********************************************\n\n");
printf("\nMatrícula : %d\n",registros[cont].cod);
printf("\nNome do Aluno é: %s\n" ,registros[cont].aluno);
printf("\nDisciplina : %s\n",registros[cont].disciplina1);
printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota1);
printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota1);
printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota3);
printf("\nDisciplina : %s\n",registros[cont].disciplina2);
printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota4);
printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota5);
printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota6);
printf("\nDisciplina : %s\n",registros[cont].disciplina3);
printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota7);
printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota8);
printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota9);
getchar();
printf("\nDeseja realmente excluir ? S/N:");
scanf("%c",&resp);
if ( ( resp == 'S' ) || ( resp == 's' ) )
{
registros[cont].vazio=0;
printf("\nExclusão feita com sucesso\n\n");
break;
}
else
{
if ( ( resp == 'N' ) || ( resp == 'n' ) )
{
printf("Exclusão cancelada!\n");
break;
}
}
}
}
cont++;
if ( cont > 100 )
printf("\nCodigo nao encontrado\n");
}
system("pause");
system("cls");
}
Como eu disse, ele roda de boa só não lista todos os alunos e apenas 0 1º, um #trabalhozinho de faculdade.. Obrigado !Discussão (3)
Carregando comentários...