Jump to content

Pesquisar e modificar em lista ligada


alphasil

Recommended Posts

Olá

Tenho de modificar um numero de telefone após uma pesquisa, ou seja, depois de validar nome e numero de telefone, tenho de alterar o telefone


void pesquisa(char *nome, int t)
{
   int x;
   struct clientes *aux;
   int flag=0;
   aux=Primeiro->Prox;
   while(aux !=NULL)
   {
       if ((strcmp(aux->nome, nome) == 0) || (aux->tel == t))
       {
           printf("Encontrado...");
           printf("Insira novo numero: \n");
           scanf("%d", &x);
           aux->tel=x;
           aux=NULL;
           flag=1;
       }
       else
       aux=aux->Prox;
   }
   if(!flag)
   printf("\nNada encontrado com esses dados na lista!!!");
}
Edited by alphasil
gmc11

 

Link to comment
Share on other sites

parece ter 2 erros e 1 ponto de implementação que detesto :

   aux=Primeiro->Prox;

só posso presumir que Primeiro é uma variável global, espero que deixes de usar este tipo de implementação muito recentemente.

   aux=Primeiro->Prox;

isto parece que começas a fazer a pesquisa no segundo elemento da lista

       if ((strcmp(aux->nome, nome) == 0) || (aux->tel == t))

isto, em conjunto com o que referiste no teu post anterior:

Tenho de modificar um numero de telefone após uma pesquisa, ou seja, depois de validar nome e numero de telefone, tenho de alterar o telefone

dizes que tanto o nome e o número de telefone são validados, no entanto no teu código basta um ser igual, ditado pelo operador || (ou)

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Oi HHH

Sim, o exercício pedia variaveis globais, Primeiro e Ultimo

Primeiro é o 1º elemento da lista

Proximo é o próximo elemento da lista que está dentro da struct

Tens razão || é ou e eu quero validar os 2 por isso deveria ser &&

A questão é se depois de validar esses dados se alterar somente os dados de tel, vai assumir para aquele elemento o novo numero.

gmc11

 

Link to comment
Share on other sites

1º - como te disse, estás a começar a pesquisa pelo segundo elemento porque estás a atribuir "Primeiro->Prox" à variável "aux"

deverás atribuir somente "Primeiro"

2º - o elemento apontado por "aux" será alterado.

3º - existem muitas simplificações, na realidade, tu é que complicaste um bocada:

void pesquisa(char *nome, int t)
{
//    int x; <--------- Isto nao serve para nada
   struct clientes *aux;
//    int flag=0; <---------------Isto nao serve para nada
//    aux=Primeiro->Prox; <---------Estas a ignorar o primeiro elemento da lista
   aux=Primeiro;
   while(aux !=NULL)
   {
//        if ((strcmp(aux->nome, nome) == 0) || (aux->tel == t))
       if ((strcmp(aux->nome, nome) == 0) && (aux->tel == t))
       {
           printf("Encontrado...");
           printf("Insira novo numero: \n");
           scanf("%d", &(aux->tel)); // <------ ler diretamente para o elemento da lista
//            aux->tel=x; <--------- Isto nao serve para nada
//            aux=NULL; <--------- Isto nao serve para nada
//            flag=1; <--------- Isto nao serve para nada
           return; // <-----Termina a execucao da funcao
       }
       else
           aux=aux->Prox;
   }
//    if(!flag) <--------- Isto nao serve para nada
   printf("\nNada encontrado com esses dados na lista!!!");
}
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.