Ir para conteúdo
Fórum Script Brasil
  • 0

Linguagem C - problema com leitura de arquivo txt


LRicardor

Pergunta

Oi, pessoal. Sou novato aqui no fórum (e em programação) e tô com um problema num programa de cadastro de pessoas em C. Depois de muito tempo, consegui fazer o programa ler de um arquivo .txt (dados.txt), mas, apesar de ler, os dados não são visualizados em outras funções do programa (como listar). Acredito que seja porque os dados que são armazenados em "point" não são repassados para o resto do programa, mas não tenho certeza. Se alguém puder ajudar, agradeço.

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>

 typedef struct lista{
     char nome[40];
     char rua[40];
     char bairro[40];
     char email[40];
     int telefone;
     char telefoneconvertido[40];
     char formacao[40];
     char local[40];
     char cargo[40];
     char idioma1[40];
     int tempo;
     char tempoconvertido[40];
     float salario;
     char salarioconvertido[40];
     int cpf;
     char cpfconvertido[40];
     unsigned long int codigo;
     struct lista* ant;
     struct lista* prox;
   }Lista;

   //Declaração de funções.
   Lista* inserir(Lista* primeiro);
   void listar(Lista* primeiro, Lista* point);
   Lista* excluir(Lista* primeiro);
   void alterar(Lista* primeiro);
   void pesquisar(Lista* primeiro);
   void carregar(Lista* primeiro, Lista* aux, Lista* point);
   void escrever(Lista* primeiro);

main()
{
   setlocale(LC_ALL, "Portuguese");
   //Declaração de variáveis
   Lista *primeiro= NULL;
   Lista *atual;
   Lista* aux;
   Lista* point;
   char opcao;
   carregar(primeiro, aux, point);

   //Artifício para repetir o programa.
   while(opcao!='s')
   {
     //Menu de opcoes
      printf(" ----------------------------------------------------------------------------\n");
      printf(" | ");printf("\t\t\t     RECRUTAMENTO ONLINE");printf("\t\t\t    |\n");
      printf(" ----------------------------------------------------------------------------\n");
      printf("   |-----------------------------------|\n");
      printf("   | <A>  Novo cadastro                |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <B>  Listar                       |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <C>  Excluir cadastro             |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <D>  Alterar cadastro             |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <E>  Pesquisar cadastro           |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <F>  Sobre o programa             |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <S>  Sair                         |\n");
      printf("   |-----------------------------------|");
      printf("\n\n\n\n");

      //Lendo a opcao do menu
      fflush(stdin);
      opcao= getch();

      //Menu de opcoes
      switch(opcao)
      {
         case 'A':
         case 'a':
              //Inserindo as pessoas.
              fflush(stdin);
              system("cls");
              printf(" ----------------------------------------------------------------------------\n");
              printf(" | ");printf("\t\t\t          NOVO CADASTRO     ");printf("\t\t\t    |\n");
              printf(" ----------------------------------------------------------------------------\n");
              primeiro= inserir(primeiro);
         getch();
         system("cls");
         break;

         case 'B':
         case 'b':
              //Listando as pessoas.
              system ("cls");
              printf(" ----------------------------------------------------------------------------\n");
              printf(" | ");printf("\t\t\t     PESSOAS CADASTRADAS");printf("\t\t\t    |\n");
              printf(" ----------------------------------------------------------------------------\n");
              listar(primeiro, point);
         getch();
         system("cls");
         break;

         case 'C':
         case 'c':
              //Excluindo pessoas da lista.
              system ("cls");
              printf(" ----------------------------------------------------------------------------\n");
              printf(" | ");printf("\t\t\t        EXCLUIR CADASTROS");printf("\t\t\t    |\n");
              printf(" ----------------------------------------------------------------------------\n");
              primeiro= excluir(primeiro);
         getch();
         system("cls");
         break;

         case 'D':
         case 'd':
              //Alterando pessoas da lista.
              system ("cls");
              printf(" ----------------------------------------------------------------------------\n");
              printf(" | ");printf("\t\t\t       ALTERAR CADASTRADOS");printf("\t\t\t    |\n");
              printf(" ----------------------------------------------------------------------------\n");
              alterar(primeiro);
         getch();
         system("cls");
         break;

         case 'E':
         case 'e':
              //Pesquisando pessoas da lista.
              system ("cls");
              printf(" ----------------------------------------------------------------------------\n");
              printf(" | ");printf("\t\t\t       PESQUISAR CADASTRADOS");printf("\t\t\t    |\n");
              printf(" ----------------------------------------------------------------------------\n");
              pesquisar(primeiro);
         getch();
         system("cls");
         break;

         case 'F':
         case 'f':
              //Fala um pouco sobre como funciona o programa.
              system ("cls");
              printf(" -----------------------------------------------------------------------------\n");
              printf(" | ");printf("\t\t\t       SOBRE O PROGRAMA");printf("\t\t\t             |\n");
              printf(" -----------------------------------------------------------------------------\n");
              printf(" |O programa foi criado com o conceito de que candidatos a determinadas vagas|\n");
              printf(" |                                                                           |\n");
              printf(" |de emprego poderiam ser cadastrados, adicionando dados relevantes para o   |\n");
              printf(" |                                                                           |\n");
              printf(" |empregador. O programa é destinado para o empregador que queira organizar  |\n");
              printf(" |                                                                           |\n");
              printf(" |os candidatos e tornar mais fácil o recrutamento. O programa conta com     |\n");
              printf(" |                                                                           |\n");
              printf(" |5 funcionalidades principais: cadastro, listagem de candidatos, alteração  |\n");
              printf(" |                                                                           |\n");
              printf(" |de dados, exclusão de cadastro e pesquisa de candidatos.                   |\n");
              printf(" -----------------------------------------------------------------------------\n");
              printf("\n\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
              getch();
              system("cls");
         break;

         case 'S':
         case 's':
              //Artifício para sair do programa.
              escrever(primeiro);
              opcao='s';
         break;

         default:
              //Artifício que previne a situação de um usuário qualquer, digitar uma opcão inexistente no menu.
              system("cls");
         break;
      }
   }
}

Lista* inserir (Lista *primeiro){
     setlocale(LC_ALL, "Portuguese");
     Lista pessoa;
     Lista *atual= primeiro;
     char identificador= 'F';

     //Lendo as informações do candidato.
     printf("  Nome: ");
     fflush (stdin); fgets(pessoa.nome, 40, stdin); printf ("\n");
     printf("  Rua: ");
     fflush (stdin); fgets(pessoa.rua, 40, stdin); printf ("\n");
     printf("  Bairro: ");
     fflush (stdin); fgets(pessoa.bairro, 40, stdin); printf ("\n");
     printf("  E-mail: ");
     fflush (stdin); fgets(pessoa.email, 40, stdin); printf ("\n");
     printf("  Telefone: ");
     scanf("%d",&pessoa.telefone);printf ("\n");
     printf("  Formação: ");
     fflush (stdin); fgets(pessoa.formacao, 40, stdin); printf ("\n");
     printf("  Local de Formação: ");
     fflush (stdin); fgets(pessoa.local, 40, stdin); printf ("\n");
     printf("  Cargo Pretendido: ");
     fflush (stdin); fgets(pessoa.cargo, 40, stdin); printf ("\n");
     printf("  Língua Estrangeira: ");
     fflush (stdin); fgets(pessoa.idioma1, 40, stdin); printf ("\n");
     printf("  Tempo de experiência no cargo(em anos): ");
     scanf("%d",&pessoa.tempo);printf ("\n");
     printf("  Pretensão salarial: ");
     scanf("%f",&pessoa.salario);printf ("\n");
     printf("  CPF: ");
     scanf("%d",&pessoa.cpf, 9);printf ("\n");
     printf("  Código: ");
     scanf("%u",&pessoa.codigo);printf ("\n");

     //Verificando se o cadastro já existe.
     for(atual=primeiro; atual!=NULL; atual=atual->prox){
        if(atual->codigo==pessoa.codigo){
            identificador= 'V';
            break;
        }
     }

     if(identificador!='V' && (strlen(pessoa.nome)!=1 && strlen(pessoa.rua)!=1)){
         //Alocando os espaços e guardando as informações do candidato.
         Lista* NovoCandidato=(Lista*) malloc (sizeof(Lista));
         strcpy(NovoCandidato->nome, pessoa.nome);
         strcpy(NovoCandidato->rua, pessoa.rua);
         strcpy(NovoCandidato->bairro, pessoa.bairro);
         strcpy(NovoCandidato->email, pessoa.email);
         NovoCandidato->telefone= pessoa.telefone;
         strcpy(NovoCandidato->formacao, pessoa.formacao);
         strcpy(NovoCandidato->cargo, pessoa.cargo);
         strcpy(NovoCandidato->local, pessoa.local);
         strcpy(NovoCandidato->idioma1, pessoa.idioma1);
         NovoCandidato->tempo= pessoa.tempo;
         NovoCandidato->salario= pessoa.salario;
         NovoCandidato->cpf= pessoa.cpf;
         NovoCandidato->codigo= pessoa.codigo;
         NovoCandidato->prox= primeiro;
         printf("  Cadastro realizado com sucesso.");
         printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         return NovoCandidato;
     }else{
         printf("  Cadastro inválido.");
         printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         return primeiro;
     }
}

void listar (Lista* primeiro, Lista* point){
     setlocale(LC_ALL, "Portuguese");
     Lista* atual;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.
     primeiro = point;

     //Imprimindo os candidatos da lista, e suas repectivas informações.
     for(atual= primeiro ; atual!= NULL; atual= atual->prox){
        printf("\n  Nome: ");
        printf("%s", atual->nome);
        printf("\n  Rua: ");
        printf("%s", atual->rua);
        printf("\n  Bairro: ");
        printf("%s", atual->bairro);
        printf("\n  E-mail: ");
        printf("%s", atual->email);
        printf("\n  Telefone: ");
        printf("%d", atual->telefone);
        printf("\n\n  Formação: ");
        printf("%s", atual->formacao);
        printf("\n  Local de Formação: ");
        printf("%s", atual->local);
        printf("\n  Cargo Pretendido: ");
        printf("%s", atual->cargo);
        printf("\n  Língua Estrangeira: ");
        printf("%s", atual->idioma1);
        printf("\n  Tempo de experiência no cargo(em anos): ");
        printf("%d", atual->tempo);
        printf("\n\n  Pretensão Salarial: ");
        printf("%.2f", atual->salario);
        printf("\n\n  CPF: ");
        printf("%d", atual->cpf);
        printf("\n\n  Código: ");
        printf("%u", atual->codigo);
        printf("\n\n");
     }
     if(primeiro==NULL)
        printf("  Nenhum candidato cadastrado.");
     printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
}

Lista* excluir(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.
     unsigned long int codigo=0;

     //Requisitando e lendo o código do candidato a ser excluído.
     printf("  Código do candidato a ser excluído: ");
     fflush(stdin);
     scanf("%u",&codigo);

     //Procurando o candidato na lista.
     while(atual!= NULL && atual->codigo!=codigo){
        anterior= atual;
        atual= atual->prox;
     }

     //Mensagem caso o candidato não seja encontrado.
     if(atual==NULL){
        printf("\n  Candidato não encontrado.");
        printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
        return primeiro;
     }

     //Excluindo o primeiro candidato da lista.
     if(anterior==NULL){
        printf("\n  Conteúdo excluído com sucesso.");
        primeiro= atual->prox;
     //Excluindo um candidato do meio da lista.
     }else{
        printf("\n  Conteúdo excluído 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 candidato.
void alterar(Lista* primeiro){
     char nome_substituto[40], rua_substituto[40], bairro_substituto[40], email_substituto[40], formacao_substituto[40], local_substituto[40], cargo_substituto[40], idioma1_substituto[40];
     char telefone_substituto[40], tempo_substituto[40], cpf_substituto[40];
     char salario_substituto[40];
     unsigned long int codigo;
     Lista* atual=primeiro;

     //Requisitando e lendo o código do candidato a ser alterado.
     printf("  Código do candidato a ser alterado: ");
     fflush(stdin);
     scanf("%u",&codigo);

     //Procurando o candidato na lista.
     while(atual!= NULL && atual->codigo!=codigo){
        atual= atual->prox;
     }

     //Alterando os dados do candidato.
     if(atual!=NULL){
        sprintf(atual->telefoneconvertido, "%i", atual->telefone);
        sprintf(atual->tempoconvertido, "%i", atual->tempo);
        sprintf(atual->cpfconvertido, "%i", atual->cpf);
        sprintf(atual->salarioconvertido, "%f", atual->salario);
        printf("\n  Novo nome: ");
        fflush (stdin); fgets(nome_substituto, 40, stdin);
        strcpy(atual->nome,nome_substituto);
        printf("\n  Nova rua: ");
        fflush (stdin); fgets(rua_substituto, 40, stdin);
        strcpy(atual->rua,rua_substituto);
        printf("\n  Novo bairro: ");
        fflush (stdin); fgets(bairro_substituto, 40, stdin);
        strcpy(atual->bairro,bairro_substituto);
        printf("\n  Novo e-mail: ");
        fflush (stdin); fgets(email_substituto, 40, stdin);
        strcpy(atual->email,email_substituto);
        printf("\n  Novo telefone: ");
        fflush (stdin); fgets(telefone_substituto, 40, stdin);
        strcpy(atual->telefoneconvertido,telefone_substituto);
        atual->telefone=atoi(atual->telefoneconvertido);
        printf("\n  Nova formação: ");
        fflush (stdin); fgets(formacao_substituto, 40, stdin);
        strcpy(atual->formacao,formacao_substituto);
        printf("\n  Novo local: ");
        fflush (stdin); fgets(local_substituto, 40, stdin);
        strcpy(atual->local,local_substituto);
        printf("\n  Novo cargo: ");
        fflush (stdin); fgets(cargo_substituto, 40, stdin);
        strcpy(atual->cargo,cargo_substituto);
        printf("\n  Nova Língua Estrangeira: ");
        fflush (stdin); fgets(idioma1_substituto, 40, stdin);
        strcpy(atual->idioma1,idioma1_substituto);
        printf("\n  Novo tempo de experiência no cargo: ");
        fflush (stdin); fgets(tempo_substituto, 40, stdin);
        strcpy(atual->tempoconvertido,tempo_substituto);
        atual->tempo=atoi(atual->tempoconvertido);
        printf("\n  Nova pretensão salarial: ");
        fflush (stdin); fgets(salario_substituto, 40, stdin);
        strcpy(atual->salarioconvertido,salario_substituto);
        atual->salario=atoi(atual->salarioconvertido);
        printf("\n  Novo cpf: ");
        fflush (stdin); fgets(cpf_substituto, 40, stdin);
        strcpy(atual->cpfconvertido,cpf_substituto);
        atual->cpf=atoi(atual->cpfconvertido);
        printf("  Dados alterados com sucesso.");
     }else{
        printf("\n  Candidato não encontrado.");
     }
     printf("\n\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
}

void pesquisar (Lista* primeiro){
    setlocale(LC_ALL, "Portuguese");
    char opcao;
    int codigopesquisa;
    int salariopesquisa;
    int tempopesquisa;
    char nomepesquisa[40];
    char formacaopesquisa[40];
    char cargopesquisa[40];
    char idioma1pesquisa[40];
      printf("   |-----------------------------------| \n");
      printf("   | <A>  Nome                         |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <B>  Código                       |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <C>  Formação                     |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <D>  Cargo                        |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <E>  Língua Estrangeira           |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <F>  Salário Pretendido           |\n");
      printf("   |-----------------------------------|\n");
      printf("   | <G>  Tempo de Experiência         |\n");
      printf("   |-----------------------------------|\n");
      printf("\n\n\n\n");

      //Lendo a opcao do menu
      fflush(stdin);
      opcao= getch();

      //Menu de opcoes
      switch(opcao)
      {
         case 'A':
         case 'a':
              //Pesquisando por nome.
              system ("cls");
              Lista* atualnome;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.
              printf("\n  Nome a ser pesquisado: ");
              fflush (stdin); fgets(nomepesquisa, 40, stdin);
              for(atualnome= primeiro ; atualnome!= NULL; atualnome= atualnome->prox){
                if(strcmp(atualnome->nome, nomepesquisa) == 0){
                    printf("\n  Nome: ");
                    printf("%s", atualnome->nome);
                    printf("\n  Rua: ");
                    printf("%s", atualnome->rua);
                    printf("\n  Bairro: ");
                    printf("%s", atualnome->bairro);
                    printf("\n  E-mail: ");
                    printf("%s", atualnome->email);
                    printf("\n  Telefone: ");
                    printf("%d", atualnome->telefone);
                    printf("\n\n  Formação: ");
                    printf("%s", atualnome->formacao);
                    printf("\n  Local de Formação: ");
                    printf("%s", atualnome->local);
                    printf("\n  Cargo Pretendido: ");
                    printf("%s", atualnome->cargo);
                    printf("\n  Língua Estrangeira: ");
                    printf("%s", atualnome->idioma1);
                    printf("\n  Tempo de experiência no cargo(em anos): ");
                    printf("%d", atualnome->tempo);
                    printf("\n\n  Pretensão Salarial: ");
                    printf("%.2f", atualnome->salario);
                    printf("\n\n  CPF: ");
                    printf("%d", atualnome->cpf);
                    printf("\n\n  Código: ");
                    printf("%u", atualnome->codigo);
                    printf("\n\n");
                }
              }
              printf("\n\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         break;

         case 'B':
         case 'b':
              //Pesquisando por código.
              system ("cls");
              Lista* atualcodigo;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.
              printf("\n  Código a ser pesquisado: ");
              scanf("%d", &codigopesquisa);
              for(atualcodigo= primeiro ; atualcodigo!= NULL; atualcodigo= atualcodigo->prox){
                if(atualcodigo->codigo==codigopesquisa){
                    printf("\n  Nome: ");
                    printf("%s", atualcodigo->nome);
                    printf("\n  Rua: ");
                    printf("%s", atualcodigo->rua);
                    printf("\n  Bairro: ");
                    printf("%s", atualcodigo->bairro);
                    printf("\n  E-mail: ");
                    printf("%s", atualcodigo->email);
                    printf("\n  Telefone: ");
                    printf("%d", atualcodigo->telefone);
                    printf("\n\n  Formação: ");
                    printf("%s", atualcodigo->formacao);
                    printf("\n  Local de Formação: ");
                    printf("%s", atualcodigo->local);
                    printf("\n  Cargo Pretendido: ");
                    printf("%s", atualcodigo->cargo);
                    printf("\n  Língua Estrangeira: ");
                    printf("%s", atualcodigo->idioma1);
                    printf("\n  Tempo de experiência no cargo(em anos): ");
                    printf("%d", atualcodigo->tempo);
                    printf("\n\n  Pretensão Salarial: ");
                    printf("%.2f", atualcodigo->salario);
                    printf("\n\n  CPF: ");
                    printf("%d", atualcodigo->cpf);
                    printf("\n\n  Código: ");
                    printf("%u", atualcodigo->codigo);
                    printf("\n\n");
                }
              }
              printf("\n\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         break;

         case 'C':
         case 'c':
              //Pesquisando por formação.
              system ("cls");
              Lista* atualformacao;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.
              printf("\n  Formação a ser pesquisada: ");
              fflush (stdin); fgets(formacaopesquisa, 40, stdin);
              for(atualformacao= primeiro ; atualformacao!= NULL; atualformacao= atualformacao->prox){
                if(strcmp(atualformacao->formacao, formacaopesquisa) == 0){
                    printf("\n  Nome: ");
                    printf("%s", atualformacao->nome);
                    printf("\n  Rua: ");
                    printf("%s", atualformacao->rua);
                    printf("\n  Bairro: ");
                    printf("%s", atualformacao->bairro);
                    printf("\n  E-mail: ");
                    printf("%s", atualformacao->email);
                    printf("\n  Telefone: ");
                    printf("%d", atualformacao->telefone);
                    printf("\n\n  Formação: ");
                    printf("%s", atualformacao->formacao);
                    printf("\n  Local de Formação: ");
                    printf("%s", atualformacao->local);
                    printf("\n  Cargo Pretendido: ");
                    printf("%s", atualformacao->cargo);
                    printf("\n  Língua Estrangeira: ");
                    printf("%s", atualformacao->idioma1);
                    printf("\n  Tempo de experiência no cargo(em anos): ");
                    printf("%d", atualformacao->tempo);
                    printf("\n\n  Pretensão Salarial: ");
                    printf("%.2f", atualformacao->salario);
                    printf("\n\n  CPF: ");
                    printf("%d", atualformacao->cpf);
                    printf("\n\n  Código: ");
                    printf("%u", atualformacao->codigo);
                    printf("\n\n");
                }
              }
              printf("\n\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         break;

         case 'D':
         case 'd':
              //Pesquisando por cargo.
              system ("cls");
              Lista* atualcargo;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.
              printf("\n  Cargo a ser pesquisado: ");
              fflush (stdin); fgets(cargopesquisa, 40, stdin);
              for(atualcargo= primeiro ; atualcargo!= NULL; atualcargo= atualcargo->prox){
                if(strcmp(atualcargo->cargo, cargopesquisa) == 0){
                    printf("\n  Nome: ");
                    printf("%s", atualcargo->nome);
                    printf("\n  Rua: ");
                    printf("%s", atualcargo->rua);
                    printf("\n  Bairro: ");
                    printf("%s", atualcargo->bairro);
                    printf("\n  E-mail: ");
                    printf("%s", atualcargo->email);
                    printf("\n  Telefone: ");
                    printf("%d", atualcargo->telefone);
                    printf("\n\n  Formação: ");
                    printf("%s", atualcargo->formacao);
                    printf("\n  Local de Formação: ");
                    printf("%s", atualcargo->local);
                    printf("\n  Cargo Pretendido: ");
                    printf("%s", atualcargo->cargo);
                    printf("\n  Língua Estrangeira: ");
                    printf("%s", atualcargo->idioma1);
                    printf("\n  Tempo de experiência no cargo(em anos): ");
                    printf("%d", atualcargo->tempo);
                    printf("\n\n  Pretensão Salarial: ");
                    printf("%.2f", atualcargo->salario);
                    printf("\n\n  CPF: ");
                    printf("%d", atualcargo->cpf);
                    printf("\n\n  Código: ");
                    printf("%u", atualcargo->codigo);
                    printf("\n\n");
                }
              }
              printf("\n\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         break;

         case 'E':
         case 'e':
              //Pesquisando por língua estrangeira.
              system ("cls");
              Lista* atualidioma1;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.
              printf("\n  Língua estrangeira a ser pesquisada: ");
              fflush (stdin); fgets(idioma1pesquisa, 40, stdin);
              for(atualidioma1= primeiro ; atualidioma1!= NULL; atualidioma1= atualidioma1->prox){
                if(strcmp(atualidioma1->idioma1, idioma1pesquisa) == 0){
                    printf("\n  Nome: ");
                    printf("%s", atualidioma1->nome);
                    printf("\n  Rua: ");
                    printf("%s", atualidioma1->rua);
                    printf("\n  Bairro: ");
                    printf("%s", atualidioma1->bairro);
                    printf("\n  E-mail: ");
                    printf("%s", atualidioma1->email);
                    printf("\n  Telefone: ");
                    printf("%d", atualidioma1->telefone);
                    printf("\n\n  Formação: ");
                    printf("%s", atualidioma1->formacao);
                    printf("\n  Local de Formação: ");
                    printf("%s", atualidioma1->local);
                    printf("\n  Cargo Pretendido: ");
                    printf("%s", atualidioma1->cargo);
                    printf("\n  Língua Estrangeira: ");
                    printf("%s", atualidioma1->idioma1);
                    printf("\n  Tempo de experiência no cargo(em anos): ");
                    printf("%d", atualidioma1->tempo);
                    printf("\n\n  Pretensão Salarial: ");
                    printf("%.2f", atualidioma1->salario);
                    printf("\n\n  CPF: ");
                    printf("%d", atualidioma1->cpf);
                    printf("\n\n  Código: ");
                    printf("%u", atualidioma1->codigo);
                    printf("\n\n");
                }
              }
              printf("\n\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         break;

         case 'F':
         case 'f':
              //Pesquisando por salário.
              system ("cls");
              Lista* atualsalario;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.
              printf("\n  Salário máximo a ser pesquisado: ");
              scanf("%d", &salariopesquisa);
              for(atualsalario= primeiro ; atualsalario!= NULL; atualsalario= atualsalario->prox){
                if(atualsalario->salario<=salariopesquisa){
                    printf("\n  Nome: ");
                    printf("%s", atualsalario->nome);
                    printf("\n  Rua: ");
                    printf("%s", atualsalario->rua);
                    printf("\n  Bairro: ");
                    printf("%s", atualsalario->bairro);
                    printf("\n  E-mail: ");
                    printf("%s", atualsalario->email);
                    printf("\n  Telefone: ");
                    printf("%d", atualsalario->telefone);
                    printf("\n\n  Formação: ");
                    printf("%s", atualsalario->formacao);
                    printf("\n  Local de Formação: ");
                    printf("%s", atualsalario->local);
                    printf("\n  Cargo Pretendido: ");
                    printf("%s", atualsalario->cargo);
                    printf("\n  Língua Estrangeira: ");
                    printf("%s", atualsalario->idioma1);
                    printf("\n  Tempo de experiência no cargo(em anos): ");
                    printf("%d", atualsalario->tempo);
                    printf("\n\n  Pretensão Salarial: ");
                    printf("%.2f", atualsalario->salario);
                    printf("\n\n  CPF: ");
                    printf("%d", atualsalario->cpf);
                    printf("\n\n  Código: ");
                    printf("%u", atualsalario->codigo);
                    printf("\n\n");
                }
              }
              printf("\n\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         break;

         case 'G':
         case 'g':
              //Pesquisando por tempo de experiência.
              system ("cls");
              Lista* atualtempo;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.
              printf("\n  Tempo mínimo de experiência a ser pesquisado: ");
              scanf("%d", &tempopesquisa);
              for(atualtempo= primeiro ; atualtempo!= NULL; atualtempo= atualtempo->prox){
                if(atualtempo->tempo>=tempopesquisa){
                    printf("\n  Nome: ");
                    printf("%s", atualtempo->nome);
                    printf("\n  Rua: ");
                    printf("%s", atualtempo->rua);
                    printf("\n  Bairro: ");
                    printf("%s", atualtempo->bairro);
                    printf("\n  E-mail: ");
                    printf("%s", atualtempo->email);
                    printf("\n  Telefone: ");
                    printf("%d", atualtempo->telefone);
                    printf("\n\n  Formação: ");
                    printf("%s", atualtempo->formacao);
                    printf("\n  Local de Formação: ");
                    printf("%s", atualtempo->local);
                    printf("\n  Cargo Pretendido: ");
                    printf("%s", atualtempo->cargo);
                    printf("\n  Língua Estrangeira: ");
                    printf("%s", atualtempo->idioma1);
                    printf("\n  Tempo de experiência no cargo(em anos): ");
                    printf("%d", atualtempo->tempo);
                    printf("\n\n  Pretensão Salarial: ");
                    printf("%.2f", atualtempo->salario);
                    printf("\n\n  CPF: ");
                    printf("%d", atualtempo->cpf);
                    printf("\n\n  Código: ");
                    printf("%u", atualtempo->codigo);
                    printf("\n\n");
                }
              }
              printf("\n\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         break;

         default:
              //Artifício que previne a situação de um usuário qualquer, digitar uma opcão inexistente no menu.
              system("cls");
         break;
      }
   }

void escrever(Lista* primeiro){
    Lista *atual;
    FILE *f;
    f = fopen("dados.txt", "w");
    for(atual= primeiro ; atual!= NULL; atual= atual->prox){
    fprintf(f, "%s|%s|%s|%s|%d|", atual->nome, atual->rua, atual->bairro, atual->email, atual->telefone);
    fprintf(f, "%s|%s|%s|%s|%d|", atual->formacao, atual->local, atual->cargo, atual->idioma1, atual->tempo);
    fprintf(f, "%f|%d|%d|\n", atual->salario, atual->cpf, atual->codigo);
    }
    fclose(f);
}

void carregar(Lista *primeiro, Lista *aux, Lista *point){
    FILE *f;
    primeiro = malloc(sizeof(Lista));
    aux = primeiro;
    aux->prox = 0;
    aux->ant = 0;
    point = aux;
    f = fopen("dados.txt", "r+");
    rewind(f);
    point = malloc(sizeof(Lista));
    point->prox = 0;
    point->ant = aux;
    aux->prox = point;
    while(fscanf(f, "%s\n|%s\n|%s\n|%s\n|%d", &point->nome, &point->rua, &point->bairro, &point->email, &point->telefone)!=EOF){
      fscanf(f, "|%s\n|%s\n|%s\n|%s\n|%d", &point->formacao ,&point->local, &point->cargo, &point->idioma1, &point->tempo);
      fscanf(f, "|%f|%d|%d\n", &point->salario, &point->cpf, &point->codigo);
      aux = point;
      printf("assasa");
      printf("%f", point->salario);
      printf("%d", point->codigo);
      printf("%s", &point->nome);
      point = malloc(sizeof(Lista));
      point->prox = 0;
      point->ant = aux;
      aux->prox = point;
    }
    aux->prox = 0;
    free(point);
    fclose(f);
}

 

Editado por LRicardor
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olá!

 

Olha sou iniciante em Programação e em C, alem de que sou uma completa vergonha quanto a Ponteiros e Referencia, alem de que muito provavelmente não seria capaz de lhe ajudar com o seu código, mas . . .

 

Cara, dei uma compilada rápida usando as IDEs CodeBlocks e MonoDevelop, e aqui o console retornou um monte de mensagens de erros e alertas que não tem fim, então lhe aconselho a dar uma olhada nas mensagens de erros e alertas que a sua IDE lhe retorna e estudar o que cada mensagem significa . . .

 

Exemplo:

 

- Algumas das suas variáveis não estão recebendo uma valor que lhe seria atribuido:

 

|710|error: expected expression before ‘;’ token|

 

aux->prox = ;

 

Pelo que pude ver a maior parte dos erros e alertas é referente a pequenos deslizes comuns em códigos como os que você está criando, acho que seguindo a dica que lhe dei você vai conseguir resolver a maior parte dos problemas!

 

Bom por hora é isso . . . Tente o que lhe disse acima e diga o resultado . . .

 

Ubuntu 14.04 LTS   -   GCC 4.8   -   MonoDevelop 4.0.12   -   CodeBlocks 13.12

 

Espero Ter Ajudado ! ! !

Link para o comentário
Compartilhar em outros sites

  • 0

Na verdade, acho que foi um bug na inserção de códigos aqui no fórum. Parece ter excluído os "0". há, há.

O problema que tô tendo é que os valores lidos não são mostrados em outras funções do programa. Só ficam em "carregar". Vê se agora que ajeitei o código você consegue descobrir por quê.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

 

Aqui o programa retornou um erro de segmentação segmentation falt ( core dumped ) sendo assim o programa parou de funcionar!

 

Tenho algumas Observações a fazer:

 

- A biblioteca ( conio.h ) é uma biblioteca usada no sistema Windows, o que pode reduzir a portabilidade e/ou a compatibilidade com outros Sistemas como no meu caso Linux – Ubuntu 14.04 LTS, além do mais essa biblioteca esta obsoleta, então tanto quanto possível não use está biblioteca ou qualquer função que venha dela.

 

- não sei qual o uso exato que você deu no seu código para a função fflush ( stdin ); mas se foi com o intuito de limpeza de buffer do teclado, não use a função para isso, ela é muitas vezes definida como tendo um comportamento ( indefinido ) o que pode causar problemas durante a execução do programa, então evite-a ao máximo possível, o mesmo vale caso você esteja usando a função para qualquer outra coisa!

 

Vou deixar alguns links abaixo sobre a função e outros assuntos:

 

https://www.scriptbrasil.com.br/forum/topic/183218-dúvida-fflush-cc/#comment-688514

 

http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

 

https://www.vivaolinux.com.br/tópico/C-C++/fflush(stdin);

 

Bom com o seu alerta e correções, ainda assim me foram retornados alguns alertas:

 

|37|warning: return type defaults to ‘int’ [-Wreturn-type]| - você não definiu o tipo da função main() e neste caso o compilador o definiu como sendo do tipo ( int )

 

|177|warning: control reaches end of non-void function [-Wreturn-type]| - como o tipo de retorno da função main() foi definida pelo compilador como sendo do tipo ( int ) ela deve retornar algum valor ao final de sua execução, é só colocar um return 0; antes da ultima chave de fechamento da função

 

|43|warning: unused variable ‘atual’ [-Wunused-variable]| - você declarou uma variável que não está sendo usada em nenhuma parte do programa

 

|47|warning: ‘aux’ is used uninitialized in this function [-Wuninitialized]| - este alerta está lhe alertando para o fato de que a sua variável está sendo usada sem antes ter sido iniciada com algum valor seguro para a sua utilização, é só inicializar ela com algum valor, caso contrario corre o risco de utilizar lixo de memoria!

 

|47|warning: ‘point’ is used uninitialized in this function [-Wuninitialized]| - o mesmo que o alerta anterior

 

|209|warning: too many arguments for format [-Wformat-extra-args]| - aqui basicamente tinha um numero ( 9 ) dentro do scanf()

 

Os 2 alertas a seguir ficaram empatados e retornaram 11 alertas cada:

 

|752|warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘char (*)[40]’ [-Wformat=]|

 

|211|warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘long unsigned int *’ [-Wformat=]|

 

Eles parecem estar lhe alertando para o fato de que o tipo do código de formatação parece ser diferente do tipo da variável, o que pode acarretar os mais diversos problemas de execução, é só buscar colocar o codigo apropriado.

 

E neste caso ao que parece você tentou criar algum tipo de código de identificação para o cadastro da pessoa, a não ser que você vá realizar alguma operação matemática com o valor, eu costumo definir este tipo de variável como do tipo string, ex: ( char código [40]; )

 

Além disso tem o ( int cpf; ) embora exista a possibilidade de uma pessoa digitar apenas os números, não tenho certeza se o tipo ( int ) seria o mais indicado para esta variável, você pode usar o tipo string ( char cpf [15]; ) ou mesmo utilizar algo como ( long int cpf; )

 

Estou um pouco enferrujado com relação a C, mas tenho quase certeza de que você vai ter de dar uma olha nos códigos de formatação usados no programa, alguns estão dentro de printf() outros dentro de scanf()

 

|734|warning: format ‘%d’ expects argument of type ‘int’, but argument 5 has type ‘long unsigned int’ [-Wformat=]| - é basicamente o mesmo alerta do anterior

 

Bom por hora é só . . . veja se o que lhe disse acima serve de algo para lhe ajudar . . . vou estar bastante ocupado esta semana, mas se possivel tento vir aqui para ajudar em alguma coisa . . .

 

Valeu e ate a proxima ! ! !

Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, Felipe222 disse:

|752|warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘char (*)[40]’ [-Wformat=]|

 

|211|warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘long unsigned int *’ [-Wformat=]|

não tenho muito tempo para repassar códigos "titânicos" de mil linhas. Olhando assim por em cima seu código é um pouco caótico. O primeiro aviso é por que ele está tratando de usar um vetor como se fosse uma matriz, ou seja que ele está pondo & adiante da string, isso tá errado, tipo scanf("%s", &string) quando deveria ser scanf("%s", string) sem a &.

O segundo aviso é por causa que a variável é do tipo unsigned long int porem ele usa o especificador %u quando deveria ser %lu. Exemplo unsigned long int n; scanf("%lu", &n);

Porem são muitos os erros. O maior de todos é usar getch e conio >_<

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...