Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ac Neto

Fazendo uma busca em lista encadeada

Recommended Posts

Olá pessoal,

 

Este é o meu primeiro tópico aqui e venho pedir ajuda a vocês a respeito de um problema que venho tendo com um código em C. Tenho um código que faz cadastros de jogadores( nome, camisa, posição, naiconalidade, etc) os dados foram armazenados em uma struct, e eu usei uma lista encadeada, porém queria criar uma função que o usuario entrasse com o nome do jogador e o programa impimisse as informações do próprio, mas não sei fazer uma busca em C, somente sei que se usa a função strcmp, mas não estou conseguindo implementá-la na lista, Me ajudem aew PLEASE!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Segue o Código que fiz!

 

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


 typedef struct lista_jogadores{
     char nome[40];
     char posicao[40];
     char nacionalidade [40];
     int camisa;
     int anonasc;
     unsigned long int codigo;


     struct lista_jogadores* prox;
   }Lista;


   //Declaração de funções.
   Lista* inserir_jogadores(Lista* primeiro);
   void listar_jogadores(Lista* primeiro);
   Lista* excluir_jogadores(Lista* primeiro);
   void alterar_jogadores(Lista* primeiro);


main()
{
   //Declaração de variáveis
   Lista *primeiro= NULL;
   char opcao;


   //Artifício para repetir o programa.
   while(opcao!='s')
   {
     //Menu de opcoes
      printf(" %c----------------------------------------------------------------------------%c\n",201,187);
      printf(" | ");printf("\t\t\t     SISTEMA ANTIDOPPING");printf("\t\t\t      |\n");
      printf(" %c----------------------------------------------------------------------------%c\n",200,188);
      printf("\t       %c----------%c\t\t\t\t       ",201,187);
      printf("\t\t\t               |   MENU   ");printf("|\t\t\t\t      \n");
      printf("   %c-----------%c----------%c------------%c \n",201,200,188,187);
      printf("   | (A)  Novo cadastro                |\n");
      printf("   |-----------------------------------|\n");
      printf("   | (B)  Listar                       |\n");
      printf("   |-----------------------------------|\n");
      printf("   | ©  Excluir cadastro             |\n");
      printf("   |-----------------------------------|\n");
      printf("   | (D)  Alterar cadastro             |\n");
      printf("   |-----------------------------------|\n");
      printf("   | (S)  Sair                         |\n");
      printf("   %c-----------------------------------%c",200,188);
      printf("\n\n\n\n");
      printf("\t\t\t     ");


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


      //Menu de opcoes
      switch(opcao)
      {
         case 'A':
         case 'a':
              //Inserindo os jogadores
              fflush(stdin);
              system("cls");
              printf(" %c----------------------------------------------------------------------------%c\n",201,187);
              printf(" | ");printf("\t\t\t          NOVO CADASTRO     ");printf("\t\t\t      |\n");
              printf(" %c----------------------------------------------------------------------------%c\n",200,188);
              primeiro= inserir_jogadores(primeiro);
         getch();
         system("cls");
         break;


         case 'B':
         case 'b':
              //Listando os restaurantes.
              system ("cls");
              printf(" %c----------------------------------------------------------------------------%c\n",201,187);
              printf(" | ");printf("\t\t\t    JOGADORES CADASTRADOS");printf("\t\t\t      |\n");
              printf(" %c----------------------------------------------------------------------------%c\n",200,188);
              listar_jogadores(primeiro);
         getch();
         system("cls");
         break;


         case 'C':
         case 'c':
              //Excluindo Jogadores da lista.
              system ("cls");
              printf(" %c----------------------------------------------------------------------------%c\n",201,187);
              printf(" | ");printf("\t\t\t        EXCLUIR CADASTROS");printf("\t\t\t      |\n");
              printf(" %c----------------------------------------------------------------------------%c\n",200,188);
              primeiro= excluir_jogadores(primeiro);
         getch();
         system("cls");
         break;


         case 'D':
         case 'd':
              //Alterando jogadores da lista.
              system ("cls");
              printf(" %c----------------------------------------------------------------------------%c\n",201,187);
              printf(" | ");printf("\t\t\t       ALTERAR CADASTRADOS");printf("\t\t\t      |\n");
              printf(" %c----------------------------------------------------------------------------%c\n",200,188);
              alterar_jogadores(primeiro);
         getch();
         system("cls");
         break;


         case 'S':
         case 's':
              //Artifício para sair do programa.
              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_jogadores (Lista *primeiro){
     Lista jogador;
     Lista *atual= primeiro;
     char identificador= 'F';


     //Lendo as informações do jogador.
     printf("  Nome: ");
     fflush (stdin); fgets (jogador.nome, 40, stdin); printf ("\n");
     printf("  Posi%cao: ",135);
     fflush (stdin); fgets(jogador.posicao, 40, stdin); printf ("\n");
     printf("  C%cdigo: ",162);
     scanf("%u",&jogador.codigo);printf ("\n");
     printf("  Camisa: ");
     scanf("%u", &jogador.camisa);printf ("\n");
     printf("  Ano de Nascimento: ");
       scanf("%u", &jogador.anonasc);printf ("\n");
     printf("  Nacionalidade: ");
     fflush (stdin); fgets(jogador.nacionalidade, 40, stdin); printf ("\n");








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


     if(identificador!='V' && (strlen(jogador.nome)!=1 && strlen(jogador.posicao)!=1)){
         //Alocando os espaços e guardando as informações do jogador.
         Lista* Novojogador=(Lista*) malloc (sizeof(Lista));
         strcpy(Novojogador->nome, jogador.nome );
         strcpy(Novojogador->posicao, jogador.posicao);
         strcpy(Novojogador->nacionalidade, jogador.nacionalidade);
         Novojogador->codigo= jogador.codigo;
         Novojogador->camisa= jogador.camisa;
         Novojogador->anonasc= jogador.anonasc;
         Novojogador->prox= primeiro;
         printf("  Cadastro realizado com sucesso.");
         printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         return Novojogador;
     }else{
         printf("  Cadastro inv%clido.",160);
         printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
         return primeiro;
     }
}




void listar_jogadores (Lista* primeiro){
     Lista* atual;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.


     //Imprimindo os jogadores da lista, e suas repectivas informações.
     for(atual= primeiro ; atual!= NULL; atual= atual->prox){
        printf("\n  Nome: ");
        printf("%s", atual->nome);
        printf("\n  Posi%cao: ",135);
        printf("%s", atual->posicao);
        printf("\n  C%cdigo: ",162 );
        printf("%u", atual->codigo);
        printf("\n  Nacionalidade: ");
        printf("%s", atual->nacionalidade);
        printf("\n  Camisa: ");
        printf("%d", atual->camisa);
        printf("\n  Ano de Nascimento: ");
        printf("%d", atual->anonasc);
        printf("\n\n");
     }
     if(primeiro==NULL){
        printf("  Nenhum Jogador cadastrado.");
     printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
     }
}


Lista* excluir_jogadores(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 jogador a ser excluído.
     printf("  C%cdigo do jogador a ser exclu%cdo: ", 162,161);
     fflush(stdin);
     scanf("%u",&codigo);


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


     //Mensagem caso o jogador não seja encontrado.
     if(atual==NULL){
        printf("\n  Jogador n%co encontrado.", 198);
        printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
        return primeiro;
     }


     //Excluindo o primeiro jogador da lista.
     if(anterior==NULL){
        printf("\n  Conte%cdo exclu%cdo com sucesso.", 163,161);
        primeiro= atual->prox;
     //Excluindo um jogador do meio da lista.
     }else{
        printf("\n  Conte%cdo exclu%cdo com sucesso.", 163,161);
        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 Jogadores.
void alterar_jogadores(Lista* primeiro){
    unsigned long int codigo;
    int novacamisa;
     Lista* atual=primeiro;


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


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


     //Alterando os dados do restaurante.
     if(atual!=NULL){
        printf("\n  Novo numero de camisa: ");
        scanf("%d", &novacamisa);
        atual->camisa = novacamisa ;
        printf("  Dados alterados com sucesso.");
     }else{
        printf("\n  Jogador n%co encontrado.",198);
     }
     printf("\n\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

fflush(stdin);

 

Jogue isso fora.

 

Já pensou em fazer uma busca sequencial mesmo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela dica Isis.

 

Enquanto a busca sequencial poderia me falar mais a respeito?

 

 

Aterei a a parte da busca e consegui alguns resultados, mas ainda não são satisfatórios, pois quando eu realizo a busca, o programa compara apenas a primeira letra no nome, exemplo: Se eu buscar "antonio" ele acha e apaga, mas se eu buscar "acdc" ele também apaga, ou até mesmo se eu busca a letra "a" sozinha. POR FAVOR ME AJUDEM :(

 

while(atual!= NULL && strcmp(nome,atual->nome)== 1){                anterior= atual;        atual= atual->prox;     }     //Mensagem caso o jogador não seja encontrado.     if(atual==NULL){        printf("\n  Jogador n%co encontrado.", 198);        printf("\n\n  PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");        return primeiro;     }     //Excluindo o primeiro jogador da lista.     if(anterior==NULL){        printf("\n  ConteÍo excluÍo com sucesso.", 163,161);        primeiro= atual->prox;     //Excluindo um jogador do meio da lista.     } else {        printf("\n  ConteÍo excluÍo com sucesso.", 163,161);        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;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.