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 gabriel1303
      É possível verificar a ocorrência de um caractere em negrito em uma planilha do Excel utilizando c/c++?
    • By novo na programação
      O sistema consiste em ler os dados cadastrados (valores estáticos) de uma entrevista e
      fornecer as informações para as seguintes perguntas:
       
      1 - Quantidade de mulher e homens na área? (% de cada sexo)
      2 - Faixa etária? (Menor e maior idade por sexo). Criar um vetor idade para cada sexo.
      3 - Quem ganha mais? Homem ou Mulher? (Comparar médias de salários)
      4 - Quem é mais especializado? (Comparar quantidade com pós-graduação %)
       
      Ex1. Perguntas?
      Sexo (1- H, 2-M)
      Idade (?)
      Salário (?)
      Possui pós-graduação? (1-S, 2-N)

      Entrada (estática)

      Entrevistado 1
      Sexo = 1
      Idade = 19
      Salário = 4.000,00
      Possui pós-graduação = 2

      Entrevistado 2
      Sexo = 2
      Idade = 25
      Salário = 3.000,00
      Possui pós-graduação = 1

      Entrevistado 3
      Sexo = 1
      Idade = 18
      Salário = 5.000,00
      Possui pós-graduação = 2

      Entrevistado 4
      Sexo = 1
      Idade = 23
      Salário = 6.000,00
      Possui pós-graduação = 1 

      Entrevistado 5
      Sexo = 2
      Idade = 30
      Salário = 2.000,00
      Possui pós-graduação = 1

      SAÍDA
      1 - Quantidade de mulher e homens na área?
      60% homens e 40% mulheres
      2 - Faixa etária?
      homens (18-23) e mulheres (25-30)
      3 - Quem ganha mais? Homem ou Mulher?
      Homens (média 5.000,00) e Mulheres (média 2.500,00)
      4 - Quem é mais especializado?
      homens - 33% e mulheres - 100%
      Cálculo = qtdhomens com pós/qtdhomens *100
    • By ArchTGS
      #include <iostream>
      #include <locale>
      using namespace std;
      int main(){
          setlocale(LC_ALL,"ptb");
          int idade;
          char *categoria;
          cout<<"informe a idade do participante: ";
          cin>>idade;
          while(idade!=-1){
              if(idade>=7 && idade<=12){
                  categoria="INFANTIL";
              }
              else if(idade>12 && idade<=17){
                  categoria="JUVENIL";
              }
              else if(idade>17 && idade<=49){
                  categoria="ADULTO";
              }
              else if(idade>=50){
                  categoria="SÊNIOR";
              }
              else{
                  cout<<"Infelizmente o candidato ainda não pode participar!";
              }
              cout<<"O participante está na categoria "<<categoria << " \n ";
              cout<<"Informe a idade do participante: ";
              cin>>idade;
          }
      }
      então pessoal esse é meu codigo, está funcionando bonitinho, porém quando eu faço o teste da ultima opção do encadeamento else, que está em vermelho, aparece o resto do codigo também, o que está em verde, tem alguma maneira de fazer essas ultimas mensagens não aparecerem? não quero ter que colocar saídas(cout) em todos os if's e elses.
      Obs: to aprendendo peguem leve.
    • By samueloliveir
      Questão 1
      Crie um algoritmo que leia um número entre 2 e 20 e gere uma tela com a seguinte configuração:
       
      Digite um número:
      4
      Saída do algoritmo:
      1
      12
      123
      1234
      123
      12
      1
       
      Questão 2
      Escreva um algoritmo que calcule a média da seguinte sequência numérica a seguir: 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + ... + 1/50. Feito isto, o algoritmo deverá apresentar uma lista contendo todos os números da sequencia que estão acima da média calculada.
       
      Questão 3
       
      Um posto está vendendo combustíveis com a seguinte tabela de descontos: Álcool: até 20 litros, desconto de 3% por litro e acima de 20 litros, desconto de 5% por litro; Gasolina: até 20 litros, desconto de 4% por litro e acima de 20 litros, desconto de 6% por litro. Escreva um algoritmo que leia o número de litros vendidos, o tipo de combustível (A-álcool, G-gasolina) e imprima o valor a ser pago pelo cliente. Considere que o preço do litro da gasolina é R$ 2,99 e o preço do litro do álcool é R$ 2,19. Usar procedimento.
       
      Questão 4
      Um número é, por definição, primo se ele não tem divisores, exceto 1 e ele próprio. Prepare um programa para ler um número inteiro positivo e determinar se ele é ou não um número primo. Usar função.
×

Important Information

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