Jump to content
Jeovane Carvalho

Erro ao imprimir dados armazenados na memória em C

Recommended Posts

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",&registros[pos].aluno);
    
    
	printf("\nDigite a 1º  Disciplina : ");
    scanf("%s",&registros[pos].disciplina1);
    flush_in();
    printf("\nNota do 1º Bimestre: ");
	scanf("%f",&registros[pos].nota1);
   fflush(stdin);
    printf("\nNota do 2º Bimestre: ");
    scanf("%f",&registros[pos].nota2);
    fflush(stdin);
    printf("\nNota do 3º Bimestre: ");
    scanf("%f",&registros[pos].nota3);
    
	
	
	printf("\nDigite a 2º Disciplina : ");
    scanf("%s",&registros[pos].disciplina2);
    fflush(stdin);
    printf("\nNota do 1º Bimestre: ");
	scanf("%f",&registros[pos].nota4);
    fflush(stdin);
    printf("\nNota do 2º Bimestre: ");
    scanf("%f",&registros[pos].nota5);
    fflush(stdin);
    printf("\nNota do 3º Bimestre: ");
    scanf("%f",&registros[pos].nota6);
    
    
    
    
    printf("\nDigite a 3º Disciplina :  ",setlocale(LC_ALL,""));
    scanf("%s",&registros[pos].disciplina3);
    fflush(stdin);
    printf("\nNota do 1º Bimestre: ",setlocale(LC_ALL,""));
	scanf("%f",&registros[pos].nota7);
    fflush(stdin);
    printf("\nNota do 2º Bimestre: ",setlocale(LC_ALL,""));
    scanf("%f",&registros[pos].nota8);
    fflush(stdin);
    printf("\nNota do 3º Bimestre: ",setlocale(LC_ALL,""));
    scanf("%f",&registros[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 !

Share this post


Link to post
Share on other sites

Você ta fazendo um FOR, e incrementando i dentro dele.

for(int i = 0; i < pos; i++) {
	// seu código 
	i++;
}

Remove esse i++ de dentro do laço, o próprio for incrementa ele. 

Share this post


Link to post
Share on other sites
1 hora atrás, itlpps disse:

Você ta fazendo um FOR, e incrementando i dentro dele.


for(int i = 0; i < pos; i++) {
	// seu código 
	i++;
}

Remove esse i++ de dentro do laço, o próprio for incrementa ele. 

Valeu itlpps ,

mas mesmo assim ele só apresenta um resultado de 2 ou mais que estiverem cadastrados, eu trabalho mais com php e tenho pouco conhecimento em programação em C..

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Elizandro Veloso
      Preciso de ajuda em um projeto, esse projecto , precisa alterar, guardar as fichas, como  faço para alterar, guardar etc ?
       
      switch(menu) { case 'c': case 'C': printf("\n-----------------------------------------------------------\n"); printf("\t\t Ficha de Componentes\n"); printf("-----------------------------------------------------------\n"); componente = inserirComponente(componente); break; case 'p': case 'P': printf("\n-----------------------------------------------------------\n"); printf("\t\t Posto de Trabalho\n"); printf("-----------------------------------------------------------\n"); posto = inserirPostoTrabalho(posto); break; case 'f': case 'F': printf("\n-----------------------------------------------------------\n"); printf("\t\t Ficha de Funcionário\n"); printf("-----------------------------------------------------------\n"); funcionario = inserirFuncionario(funcionario); break; case 'o': case 'O': printf("\n-----------------------------------------------------------\n"); printf("\t\t Ficha das Operações\n"); printf("-----------------------------------------------------------\n"); operacao = inserirOperacao(operacao); break; case 'e': case 'E': printf("\n-----------------------------------------------------------\n"); printf("\t\t Ficha de Empresa\n"); printf("-----------------------------------------------------------\n"); empresa = inserirEmpresa(empresa); break; case 's': case 'S': printf("\n-----------------------------------------------------------\n"); printf("\t\t Obrigado e volte sempre\n"); printf("-----------------------------------------------------------\n"); break; default: printf("\n---------------------------------------------------------------\n"); printf("\t\t A instruçao inserida não existe no Menu!!\n\n\t\t Aguarde para digitar novamente...\n"); printf("-----------------------------------------------------------------\n"); sleep(4); system("cls"); } }while(menu != 'S' && menu != 's');
       
    • By Thiago Ladislau
      Bom dia gostaria de compartilhar um erro que vem ocorrendo há muito tempo na empresa em que trabalho. Porem nunca foi identificada a causa origem do mesmo, Isso ocorre de forma aleatória não tem data nem hora, acontece de repente. Sendo obrigado ao 'fechamento forçado' do sistema que pode gerar problemas na base. Em anexo imagem do Erro.   Grato
    • By TkCode
      Estou tentando desenvolver um código para calcular o valor final de custas de imoveis.
      Exemplo: Entro com um valor de R$50.000,00. Tem o ITBI que é 2% sob os R$50.000,00 + o valor de custas que é o valor de uma tabela (essa tabela tem valores que de R$0,01 até R$17.800,90 é uma valor, e assim sucessivamente)
       
      Então teria que calcular os 2% (do valor informado) + o valor da tabela, dando um resultado final com o valor total (2%+ValorTabela).
       
      Alguem teria como me dar uma dica de como resolver isso?
      Desde já agradeço!
    • By roberson abalaid
      #include <stdio.h>
      #include <stdlib.h>
      int arr[3][5];
      int main(){
          
          printf("Favor inserir os dados...\n");
          
          for(int i = 0; i < 3; i++){
              for(int j = 0; j < 5; j++){
                  scanf("%d", &arr[j]);
              }
          }
          
            printf("os valores inseridos foram...\n");
          
          for(int i = 0; i < 3; i++){
              for(int j = 0; j < 5; j++){
                  printf("  %d  ", arr[j]);
              }
              printf("\n");
          }
          return 0;
      }
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.