willrapha 0 Denunciar post Postado Setembro 25, 2014 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
GBecker 51 Denunciar post Postado Setembro 28, 2014 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