Ir ao conteúdo
  • Cadastre-se
Marina Rocha

Chamo outra função e perco os dados

Recommended Posts

Boa noite, estou louca aqui, ja tentei de tudo, mais sempre que eu chamo outra função eu perco os dados inseridos .

Ex: cadastros os professores, quando eu volto pro menu principal e entro de novo os cadastros sumiram

alguem pode me ajudar? por favor!!!!!!!

 

 

segue cogido:

 

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include "projeto.h"
main() 
{ 
   
  int op;

  do{
        system("cls");
        printf(" ------------------------------------------------------------------------------\n");
      printf(" ");printf("\t\t\t     BEM VINDO A SUA AGENDA ELETRONICA-IFNMG");printf("\t\t\t      \n");
      printf(" ------------------------------------------------------------------------------\n");
    
      printf("   ------------------------------------ \n");
      printf("   | <1>  CADASTRAR  PROFESSOR         |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <2>  AGENDA                       |\n");      
      printf("   |-----------------------------------|\n");
      printf("   | <2>  SAIR                         |\n");      
      printf("   |-----------------------------------|\n");
    
    
    
      fflush(stdin);
       op= getch(); 
    
  switch(op)
  {
    
     case'1':
     fflush(stdin);
     system("cls");
     cadastro_professor();
     break;  
     
     case '2':
     fflush(stdin);
     system("cls");
     agenda();
     break;
         
     case '3':    
     exit(0);
     break;    
     
     
      default:
    printf("Opcao Invalida"); 
    
 }
}while(op!=3);
}

    void cadastro_professor()
            {
             //Declaração de variáveis
               Lista *primeiro= NULL;
               char opcao;
               
                 
               //Para repetir o programa.
               do 
               {  
                 //Menu de opções 
                  printf(" ------------------------------------------------------------------------------\n");
                  printf(" | ");printf("\t\t\t     CADASTRO DE PROFESSORES");printf("\t\t\t      |\n");
                  printf(" ------------------------------------------------------------------------------\n");
            
                  printf("   ------------------------------------ \n");
                  printf("   | <1>  Novo cadastro                |\n");
                  printf("   |-----------------------------------|\n");
                  printf("   | <2>  Listar                       |\n");      
                  printf("   |-----------------------------------|\n");
                  printf("   | <3>  Excluir cadastro             |\n");      
                  printf("   |-----------------------------------|\n");
                  printf("   | <4>  Alterar cadastro             |\n"); 
               ;
                  printf("   -------------------------------------\n");
                  printf("   | <5>  Sair            |\n");
                  printf("   -------------------------------------\n");
                  printf("\n\n\n\n");
                  
                  
                  printf("\n\n\n\n");
                
                  //Lendo a opcao do menu limpando o buffer
                  fflush(stdin);
                  opcao= getch(); 
                  
                  //Menu de opções
                  switch(opcao)
                  {
                     case '1':   
                       
                          //Inserindo os professores.
                          fflush(stdin);
                          system("cls");
                          printf(" ----------------------------------------------------------------------------\n");
                          printf("  ");printf("\t\t\t          NOVO CADASTRO     ");printf("\t\t\t      \n");
                          printf(" ----------------------------------------------------------------------------\n");
                          primeiro= inserir_professores(primeiro);
                           //Chamando a funcao.
                     getch();
                     system("cls"); 
                     //Limpando a Tela,Saindo.
                     break;
                     
                     case '2':   
                      
                          //Mostrando  os professores.
                          system ("cls");
                          printf(" ----------------------------------------------------------------------------\n");
                          printf("  ");printf("\t\t\t     PROFESSORES CADASTRADOS");printf("\t\t\t      \n");
                          printf(" ----------------------------------------------------------------------------\n");
                          listar_professores(primeiro);
                          //Chamando a funcao.
                     getch();
                     system("cls");
                     //Limpando a Tela,Saindo
                     break;
                     
                     case '3':   
                        
                          //Exclui professores da lista.
                          system ("cls");
                          printf(" ------------------------------------------------------------------------------");
                          printf("  ");printf("\t\t\t        EXCLUIR CADASTROS");printf("\t\t\t      \n");
                          printf(" ------------------------------------------------------------------------------");
                          primeiro= excluir_professores(primeiro);
                          //Chamando a função.
                     getch();
                     system("cls");
                     //Limpando a Tela,Saindo
                     break;
            
                     case '4':   
                    
                          //Alterando professores da lista. 
                          system ("cls");
                          printf(" -----------------------------------------------------------------------------\n");
                          printf(" | ");printf("\t\t\t       ALTERAR CADASTRADOS");printf("\t\t\t      |\n");
                          printf(" -----------------------------------------------------------------------------\n");
                          alterar_professores(primeiro);
                          //Chamando a função
                     getch();
                     system("cls");
                     break;
                     
                     case '5':   // para sair do programa.
                         main();
                     break;
                     
                     default:     
                          //Previne a situação de um usuário , digitar uma opcão inexistente no menu.
                          system("cls");        
                     break; 
                  } 
               }while(opcao!=5);  
            }
     //Inserindo  as informações do professor.
              // Função Indentificar 
            Lista* inserir_professores (Lista *primeiro){ 
                 Lista professor;
                 Lista *atual= primeiro;
                 char identificador= 'F';
                 
                 //Lendo as informações do professor.
                 printf("  Nome: ");
                 fgets(professor.nome, 40, stdin); printf ("\n");
                 printf("  Ano: ");
                 fflush (stdin); fgets(professor.ano, 40, stdin); printf ("\n");
                 printf("  Codigo: ");
                 scanf("%u",&professor.codigo);printf ("\n");
                 
                 //Verificando se o cadastro já existe.Se  a variavel 
                 for(atual=primeiro; atual!=NULL; atual=atual->proximo){
                    if(atual->codigo==professor.codigo){
                        identificador= 'V'; 
                        break;
                    }    
                 }
                 // se o tamanhos das string forem  diferente de 1
                 if(identificador!='V' && (strlen(professor.nome)!=1 && strlen(professor.ano)!=1)){
                     //Alocando os espaços e guardando as informações do professor.
                     Lista* Novoprofessor=(Lista*) malloc (sizeof(Lista));       
                     strcpy(Novoprofessor->nome, professor.nome);
                     strcpy(Novoprofessor->ano, professor.ano);
                     Novoprofessor->codigo= professor.codigo;
                     Novoprofessor->proximo= primeiro;
                     printf("  Cadastro realizado com sucesso.");
                     printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
                     return Novoprofessor;    
                 }else{
                     printf("  Cadastro invalido.");
                     printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
                     return primeiro;
                 }
            }
            
            void listar_professores (Lista* primeiro){
                 Lista* atual;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.
                 
                 //Imprimindo os professores da lista, e suas repectivas informações.Primeira posição de Memoria.
                 for(atual= primeiro ; atual!= NULL; atual= atual->proximo){
                    printf("\n  Nome: ");
                    printf("%s", atual->nome);
                    printf("\n  Endere%co: ");
                    printf("%s", atual->ano);
                    printf("\n  Codigo: " );
                    printf("%u", atual->codigo);// Numero sem sinal
                    printf("\n\n");
                 }
                 if(primeiro==NULL)
                    printf("  Nenhum professor cadastrado.");
                 printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
            }
            
            Lista* excluir_professores(Lista *primeiro){
                 
                 Lista *anterior= NULL;//Ponteiro para saber o elemento anterior ao elemento atual da lista.
                 Lista *atual= primeiro;//Ponteiro para percorrer a lista sem perder o primeiro elemento da lista.
                  int codigo=0;
                  
                  
                       printf(" ------------------------------------------------------------------------------");
                       printf("  ");printf("\t\t\t      EXCLUIR CADASTROS");printf("\t\t\t      \n");
                       printf(" ------------------------------------------------------------------------------"); 
                  
                 
                 //Requisitando e lendo o código do professor a ser excluído.
                 printf("  Codigo do professor a ser excluido: ");
                 fflush(stdin);
                 scanf("%u",&codigo);// Numero sem Sinal
                 
                 //Procurando o professor na lista.
                 while(atual!= NULL && atual->codigo!=codigo){
                    anterior= atual;
                    atual= atual->proximo;
                 }
                 
                 //Mensagem caso o professor não seja encontrado.
                 if(atual==NULL){
                    printf("\n  professor nao encontrado."); 
                    printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
                    return primeiro;
                 }
                 
                 //Excluindo o primeiro professor da lista.   
                 if(anterior==NULL){
                    printf("\n  Conteudo excluicdo com sucesso."); 
                    primeiro= atual->proximo;
                 //Excluindo um professor do meio da lista.
                 }else{
                    printf("\n  Conteudo excluido com sucesso.");
                    anterior->proximo= atual->proximo;
                 }
                 
                 //Desalocando o espaço da memória.
                 free(atual);
                 printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
                 return primeiro;     
            }
            
            //Função para alterar professores.
            void alterar_professores(Lista* primeiro){     
                 char nome_substituto[40], ano_substituto[40];
                int codigo;  
                 Lista* atual=primeiro;
                 
                 //Requisitando e lendo o código do professor a ser alterado.
                 printf("  Codigo do professor a ser alterado: ");
                 fflush(stdin);
                 scanf("%u",&codigo);
                 
                 //Procurando o professor na lista.
                 while(atual!= NULL && atual->codigo!=codigo){
                    atual= atual->proximo;
                 }
                 
                 //Alterando os dados do professor.
                 if(atual!=NULL){
                    printf("\n  Novo nome: ");
                    fflush (stdin); fgets(nome_substituto, 40, stdin); 
                    strcpy(atual->nome,nome_substituto);
                    printf("\n  Novo ano: ");
                    fflush (stdin); fgets(ano_substituto, 40, stdin); printf ("\n");
                    strcpy(atual->ano,ano_substituto);
                    printf("  Dados alterados com sucesso.");
                 }else{
                    printf("\n  professor nao encontrado.");
                 }
                 printf("\n\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
            }
            

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei não lendo tudo..., rsrs'. As variáveis locais só podem ser usadas nas funções que foram criadas, se tu quiser usar a mesma variável em outras funções crie uma variável global ou nos parâmetros da função, crie um parâmetro com um endereço para ponteiro ex: int funcao(int &variavel){}.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 horas atrás, vangodp disse:

Por que só colocou uma parte do código?

 

porque o resto e igual, se eu conseguir que não suma os cadastros dos prof, o resto também não vai sumir

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu concordo com @Sr. David Almeida

Eu acho que a variável Lista* primeiro deve ser global.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei como global e não mudou nada, será que o erro não ta no for da função Listar? nossa to estão perdida....... por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, Marina Rocha disse:

Coloquei como global e não mudou nada, será que o erro não ta no for da função Listar? nossa to estão perdida....... por favor.

Pode postar como o código ficou?, se puder postar o código todo poderia testar aqui...

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, Sr. David Almeida disse:

Pode postar como o código ficou?, se puder postar o código todo poderia testar aqui...

MUITO OBRIGADA pela atenção. eu sou bem iniciante, talvez por isso tão perdida, 

o codigo não esta incompleto,só fiz essa parte mesmo pois quando ia iniciar a agenda, percebi que os cadastros sumiam.

 

segue:

 

main:

 

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include "projeto.h"

    Lista* Primeiro;
    
main() 

   
  int op;


  do{
        system("cls");
        printf(" ------------------------------------------------------------------------------\n");
      printf(" ");printf("\t\t\t     BEM VINDO A SUA AGENDA ELETRONICA-IFNMG");printf("\t\t\t      \n");
      printf(" ------------------------------------------------------------------------------\n");
    
      printf("   ------------------------------------ \n");
      printf("   | <1>  CADASTRAR  PROFESSOR         |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <2>  AGENDA                       |\n");      
      printf("   |-----------------------------------|\n");
      printf("   | <2>  SAIR                         |\n");      
      printf("   |-----------------------------------|\n");
    
    
    
      fflush(stdin);
       op= getch(); 
    
  switch(op)
  {
    

     case'1':
     fflush(stdin);
     system("cls");
     cadastro_professor();
     break;  
     
     case '2':
     fflush(stdin);
     system("cls");
     
     break;
         
     case '3':    
     exit(0);
     break;    
     
     
      default:
    printf("Opcao Invalida"); 
    
 }

}while(op!=3);

}


projeto.c:

 

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include "projeto.h"

 //Inserindo  as informações do professor.
  // Função Indentificar 

 


Lista* inserir_professores (Lista *primeiro){ 
     Lista professor;
     Lista *atual= primeiro;
     char identificador= 'F';
     
     //Lendo as informações do professor.
     printf("  Nome: ");
     fflush (stdin); //Usada para Para limpar o buffer em Windows
     
         fgets(professor.nome, 40, stdin); printf ("\n");
     printf("  Ano ");
     fflush (stdin); fgets(professor.ano, 40, stdin); printf ("\n");
     printf("  Codigo: ");
     scanf("%u",&professor.codigo);printf ("\n");
     
     //Verificando se o cadastro já existe.Se  a variavel 
     for(atual=primeiro; atual!=NULL; atual=atual->prox){
        if(atual->codigo==professor.codigo){
            identificador= 'V'; 
            break;
        }    
     }
     // se o tamanhos das string forem  diferente de 1
     if(identificador!='V' && (strlen(professor.nome)!=1 && strlen(professor.ano)!=1)){
         //Alocando os espaços e guardando as informações do professor.
         Lista* Novoprofessor=(Lista*) malloc (sizeof(Lista));       
         strcpy(Novoprofessor->nome, professor.nome);
         strcpy(Novoprofessor->ano, professor.ano);
         Novoprofessor->codigo= professor.codigo;
         Novoprofessor->prox= primeiro;
         printf("  Cadastro realizado com sucesso.");
         printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         return Novoprofessor;    
     }else{
         printf("  Cadastro invalido.");
         printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         return primeiro;
     }
}

void listar_professores (Lista* primeiro){
     Lista* atual=primeiro;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.
     
     //Imprimindo os professores da lista, e suas repectivas informações.Primeira posição de Memoria.
         for(atual= primeiro ; atual!= NULL; atual= atual->prox){
                    printf("\n  Nome: ");
                    printf("%s", atual->nome);
                    printf("\n  Endere%co: ");
                    printf("%s", atual->ano);
                    printf("\n  Codigo: " );
                    printf("%u", atual->codigo);// Numero sem sinal
                    printf("\n\n");
                 }
                 if(primeiro==NULL)
                    printf("  Nenhum professor cadastrado.");
                 printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
            }
            

Lista* excluir_professores(Lista *primeiro){
     
     Lista *anterior= NULL;//Ponteiro para saber o elemento anterior ao elemento atual da lista.
     Lista *atual= primeiro;//Ponteiro para percorrer a lista sem perder o primeiro elemento da lista.
      int codigo=0;
     
     //Requisitando e lendo o código do professor a ser excluído.
     printf("  Codigo do professor a ser excluido: ");
     fflush(stdin);
     scanf("%u",&codigo);// Numero sem Sinal
     
     //Procurando o professor na lista.
     while(atual!= NULL && atual->codigo!=codigo){
        anterior= atual;
        atual= atual->prox;
     }
     
     //Mensagem caso o professor não seja encontrado.
     if(atual==NULL){
        printf("\n  professor nao encontrado."); 
        printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
        return primeiro;
     }
     
     //Excluindo o primeiro professor da lista.   
     if(anterior==NULL){
        printf("\n  Conteudo excluicdo com sucesso."); 
        primeiro= atual->prox;
     //Excluindo um professor do meio da lista.
     }else{
        printf("\n  Conteudo excluido com sucesso.");
        anterior->prox= atual->prox;
     }
     
     //Desalocando o espaço da memória.
     free(atual);
     printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
     return primeiro;     
}

//Função para alterar professores.
void alterar_professores(Lista* primeiro){     
     char nome_substituto[40], ano_substituto[40];
    int codigo;  
     Lista* atual=primeiro;
     
     //Requisitando e lendo o código do professor a ser alterado.
     printf("  Codigo do professor a ser alterado: ");
     fflush(stdin);
     scanf("%u",&codigo);
     
     //Procurando o professor na lista.
     while(atual!= NULL && atual->codigo!=codigo){
        atual= atual->prox;
     }
     
     //Alterando os dados do professor.
     if(atual!=NULL){
        printf("\n  Novo nome: ");
        fflush (stdin); fgets(nome_substituto, 40, stdin); 
        strcpy(atual->nome,nome_substituto);
        printf("\n  Novo ano: ");
        fflush (stdin); fgets(ano_substituto, 40, stdin); printf ("\n");
        strcpy(atual->ano,ano_substituto);
        printf("  Dados alterados com sucesso.");
     }else{
        printf("\n  professor nao encontrado.");
     }
     printf("\n\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
}

void cadastro_professor()
{
 //Declaração de variáveis
   Lista *primeiro= NULL;
   char opcao;
     
   //Para repetir o programa.
   while(opcao!='5')   
   {  
     //Menu de opções 
      printf(" ------------------------------------------------------------------------------\n");
      printf(" | ");printf("\t\t\t     CADASTRO DE PROFESSORES");printf("\t\t\t      |\n");
      printf(" ------------------------------------------------------------------------------\n");

      printf("   ------------------------------------ \n");
      printf("   | <1>  Novo cadastro                |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <2>  Listar                       |\n");      
      printf("   |-----------------------------------|\n");
      printf("   | <3>  Excluir cadastro             |\n");      
      printf("   |-----------------------------------|\n");
      printf("   | <4>  Alterar cadastro             |\n"); 
      printf("   |-----------------------------------|\n");
      printf("   | <5>  Sair                         |\n");
      printf("   -------------------------------------");
      printf("\n\n\n\n");
    
      //Lendo a opcao do menu limpando o buffer
      fflush(stdin);
      opcao= getch(); 
      
      //Menu de opções
      switch(opcao)
      {
         case '1':   
           
              //Inserindo os professores.
              fflush(stdin);
              system("cls");
              printf(" %c----------------------------------------------------------------------------%c\n");
              printf(" | ");printf("\t\t\t          NOVO CADASTRO     ");printf("\t\t\t      |\n");
              printf(" %c----------------------------------------------------------------------------%c\n");
              primeiro= inserir_professores(primeiro);
               //Chamando a funcao.
         getch();
         system("cls"); 
         //Limpando a Tela,Saindo.
         break;
         
         case '2':   
          
              //Mostrando  os professores.
              system ("cls");
              printf(" ----------------------------------------------------------------------------\n");
              printf(" | ");printf("\t\t\t     professores CADASTRADOS");printf("\t\t\t      |\n");
              printf(" ----------------------------------------------------------------------------\n");
              listar_professores(primeiro);
              //Chamando a funcao.
         getch();
         system("cls");
         //Limpando a Tela,Saindo
         break;
         
         case '3':   
            
              //Exclui professores da lista.
              system ("cls");
              printf(" ------------------------------------------------------------------------------");
              printf(" | ");printf("\t\t\t        EXCLUIR CADASTROS");printf("\t\t\t      |\n");
              printf(" ------------------------------------------------------------------------------");
              primeiro= excluir_professores(primeiro);
              //Chamando a função.
         getch();
         system("cls");
         //Limpando a Tela,Saindo
         break;

         case '4':   
        
              //Alterando professores da lista. 
              system ("cls");
              printf(" -----------------------------------------------------------------------------\n");
              printf(" | ");printf("\t\t\t       ALTERAR CADASTRADOS");printf("\t\t\t      |\n");
              printf(" -----------------------------------------------------------------------------\n");
              alterar_professores(primeiro);
              //Chamando a função
         getch();
         system("cls");
         break;
         
         case '5':   
             
              // para sair do programa.
              opcao='5';
         break;
         
         default:     
              //Previne a situação de um usuário , digitar uma opcão inexistente no menu.
              system("cls");        
         break; 
      } 
   }
}

 

projeto.h:


 typedef struct lista{
     char nome[40];
     char ano[40];
     int codigo;
     struct lista* prox;   
   }Lista;
   
   //Declaração de funções.
   Lista* inserir_professores(Lista* primeiro);
   void listar_professores(Lista* primeiro);
   Lista* excluir_professores(Lista* primeiro);
   void alterar_professores(Lista* primeiro);
    void cadastro_professor();

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 horas atrás, Sr. David Almeida disse:

Pode postar como o código ficou?, se puder postar o código todo poderia testar aqui...

DEU CERTO!!!!
NOSSA CARA! MUITO OBRIGADA!

:tw_heart: voce salvou minha vida!

I lovu iu!! hahahaha

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tivesse colocado o programa completo de primeira hora você tinha solucionado seu programa no primeiro dia. =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×