Ir ao conteúdo
  • Cadastre-se

Chamo outra função e perco os dados


Posts recomendados

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.");
            }
            

 

Link para o comentário
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
Link para o comentário
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();

 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...