Ir para conteúdo

Arquivado

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

willrapha

Validação de um campo da pilha

Recommended Posts

Pessoal não estou conseguindo validar esse campo, não quero deixar que o id se repita no cadastro o programa ate entra no laço para fazer a validação mais apos entrar no laco ele não sai. E ao tentar inserir um valor que não é repetido ele entra no laço para verficar e tambem nao sai

struct Pessoa {
    int id;
   char nome[50];
   struct Pessoa *proximo;
};

struct Controle {
   struct Pessoa *pilha;
};

struct Pessoa *incluir (struct Pessoa *ultimoinserido){
  struct Pessoa *auxiliar;
  auxiliar = (struct Pessoa*) malloc(sizeof(struct Pessoa));
  printf(" digite o nome:");
  scanf("%s",&auxiliar->nome);
  printf("digite o id:");
  scanf("%d",&auxiliar->id);

  while (ultimoinserido != NULL){

     if(ultimoinserido->id==auxiliar->id){
        printf("digite o id:");
        scanf("%d",&auxiliar->id);
     }
  }

  auxiliar->proximo = NULL;

  if (ultimoinserido != NULL){
    auxiliar->proximo = ultimoinserido;
  }
  return auxiliar;
}

int main()
{

    int opcao = 1;
    struct Controle minhapilha;
    minhapilha.pilha = NULL;

    while (opcao != 4)
    {
       printf("2 incluir \n");
       printf("4 sair \n");
       printf("digite a opcao ");
       scanf("%d",&opcao);
      
if (opcao == 2){
          minhapilha.pilha = incluir(minhapilha.pilha);
       }

   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
while (ultimoinserido != NULL){

     if(ultimoinserido->id==auxiliar->id){
        printf("digite o id:");
        scanf("%d",&auxiliar->id);
     }
  }

Não vai sair desse laço enquanto ultimoinserido for diferente de NULL. Como você não atualiza essa variável, nunca receberá NULL.

 

Tente algo semelhante a isso:

while (ultimoinserido->id != auxiliar->id){
        printf("digite o id:");
        scanf("%d",&auxiliar->id);
  }

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.