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 icaroperetti45
      Faça um programa em JAVA que deve ficar lendo uma letra por vez do teclado até que o operador digite a letra x. Após o operador digitar x o programa deve apresentar na tela o número de vezes que o operador digitou dois caracteres iguais em sequencia.
       
      Rapazeada, sou iniciante no java e gostaria de uma ajuda com o Exercício a seguir! Gostaria de saber como utilizo o != para string no while!
       
      package br.edu.ifcvideira.Lista3;
      import java.util.Scanner;
      public class Exercicio7 {
              public static void main(String[] args) {
                  Scanner in = new Scanner(System.in);
                  
                  String letra = null;
                  String letraCorreta = "x";
                  
                  while (letra.equals(letraCorreta)) {
                      
                  }
              }        
      }
       
    • By gamesmax2
      Pessoal sou  novo com crianção de app android, este app e bastante simples utilizar webview.
      Estou com um problema, queria abrir link externo que não seja do meu site no navegador do celular, meu código abrir todos os links externo no meu app.
       
      exemplo quero que links externo sejam aberto no navegador e link como Youtube ou que utilizar algum app do celular seja aberto nesse app, segue meu codigo:
       
      public class MainActivity extends AppCompatActivity { private WebView cash; @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cash = findViewById(R.id.site); cash.getSettings().setJavaScriptEnabled(true); cash.setFocusable(true); cash.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); cash.getSettings().setAppCacheEnabled(true); cash.getSettings().setDomStorageEnabled(true); cash.setWebViewClient(new WebViewClient()); cash.setWebChromeClient(new Meusite()); cash.loadUrl("https://www.meusite.com.br/meu_site/"); } private class Meusite extends WebChromeClient { private View mCustomView; private WebChromeClient.CustomViewCallback mCustomViewCallback; protected FrameLayout mFullscreenContainer; private int mOriginalOrientation; private int mOriginalSystemUiVisibility; Meusite() {} public Bitmap getDefaultVideoPoster() { if (mCustomView == null) { return null; } return BitmapFactory.decodeResource(getApplicationContext().getResources(), 2130837573); } public void onHideCustomView() { ((FrameLayout)getWindow().getDecorView()).removeView(this.mCustomView); this.mCustomView = null; getWindow().getDecorView().setSystemUiVisibility(this.mOriginalSystemUiVisibility); setRequestedOrientation(this.mOriginalOrientation); this.mCustomViewCallback.onCustomViewHidden(); this.mCustomViewCallback = null; } public void onShowCustomView(View paramView, WebChromeClient.CustomViewCallback paramCustomViewCallback) { if (this.mCustomView != null) { onHideCustomView(); return; } this.mCustomView = paramView; this.mOriginalSystemUiVisibility = getWindow().getDecorView().getSystemUiVisibility(); this.mOriginalOrientation = getRequestedOrientation(); this.mCustomViewCallback = paramCustomViewCallback; ((FrameLayout)getWindow().getDecorView()).addView(this.mCustomView, new FrameLayout.LayoutParams(-1, -1)); getWindow().getDecorView().setSystemUiVisibility(3846); } } @Override public void onBackPressed() { if (cash.canGoBack()) { cash.goBack(); } else { super.onBackPressed(); } } }  
    • By TheRuivo
      Olá,
      estou tentando criar um código em c++ com funções e procedimentos a um tempo, só que eles sempre retornam 0, se alguém puder me ajudar, agradeço. ;)
      Segue o código:
      #include <iostream>
      #include <stdlib.h>
      #include <stdio.h>
      #include<locale.h>
      #include<math.h>
      #include<cmath>
      using namespace std;
      void Triangulo(int la)
      {
          double b,h,r;
              printf("Por favor digite o valor da base e da altura: \n");
              scanf("%i %i",&b,&h);
              r=(b*h)/2;
              printf("A área é: %i \n",r);
      }
      double Quadrado(int la, int b, int h)
      {
          double r;
          printf("Por favor digite o valor da base e da altura: \n");
          scanf("%i %i",&b,&h);
          r=b*h; 
          printf("A área é: %i ",r);
          return r;
      }
      int Menu(int la)
      {
          int b,h;
          switch(la)
          {
              case 3:
                  printf("É um triângulo \n");
                  Triangulo(la);
                  break;
              case 4:
                  printf("É um quadrilátero \n");
                  Quadrado(la,b,h);
                  break;
              case 5:
                  printf("É um pentágono \n");
                  break;
              case 6:
                  printf("É um hexágono \n");
                  break;        
          }
          return la;
      }
      int main(int argc, char** argv) {
          setlocale(LC_ALL, "Portuguese");
          int b,h,r,l;
          printf("Por favor insira a quantidade de lados da figura(3-6): ");
          scanf("%i",&l);
          Menu(l);
          
          
          
             
          system("pause");
          return 0;
      }
    • By Edilson jose da silva
      Saudações...
      preciso desenvolver uma classe em JAVA que gere um boleto, essa classe deve calcular multa e juros de acordo com os dias de atraso, porém se o vencimento cair num sábado ou domingo e a pessoa pagar na segunda, ela não pode pagar multa nem juros pois o sistema bancário convencional não funciona nesses dias, o sistema precisa também prever feriados, alguém sabe como posso fazer isso usando um calendário com esses dias marcados?
    • By Claudia França
      prezados qdo removo o require colocado antes do doctype o botão desaparece como na imagem . Alguem pode me explicar porque??    dentro do setting tem apenas informações key do cliente e configurações da conta de email. 
       


×

Important Information

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