Ac Neto 0 Denunciar post Postado Novembro 23, 2013 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
reebr 94 Denunciar post Postado Novembro 23, 2013 Posta o código da função. Compartilhar este post Link para o post Compartilhar em outros sites
Ac Neto 0 Denunciar post Postado Novembro 23, 2013 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
_Isis_ 202 Denunciar post Postado Novembro 25, 2013 fflush(stdin); Jogue isso fora. Já pensou em fazer uma busca sequencial mesmo? Compartilhar este post Link para o post Compartilhar em outros sites
Ac Neto 0 Denunciar post Postado Novembro 25, 2013 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