Ir ao conteúdo
  • Cadastre-se

Validação de um campo da lista


Marcela Dutra
Ir à solução Resolvido por sepoki,

Posts recomendados

Bom dia, sou nova no fórum


 


Estou com um problema em uma validação obrigada pela ajuda


O problema é o seguinte:


Estou tentando fazer que o programa não deixe gravar id repetido, só que o programa esta verificando somente o primeiro id cadastrado e pulando os outros. 



#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define MAX 5

typedef struct
{
int id;
char modelo[8];
char fabricante[30];
int passageiros;
float comprimento;
float altura;
float velocidade;
float altitude;
char motor [10];
} AVIAO;

typedef struct
{
AVIAO vetor[MAX];
int nElementos;
} LISTA;

void criarLista(LISTA *lista)
{
lista->nElementos = 0;
}

bool IdRepitido(int id, LISTA *lista)
{
int i;
for(i=0; i < lista->nElementos; i++)
{
if(id == lista->vetor[i].id)
{
return true;
}else{

return false;
}

}
}

int main()
{
char op=0;
LISTA lista;
AVIAO av;

criarLista(&lista);

do
{
printf ("1 - Inserir\n");
printf ("2 - Sair\n");
printf ("opcao: ");
scanf ("%c", &op);

switch(op)
{
case '1':
printf ("ID: ");
scanf("%d", &av.id);

while(IdRepitido(av.id,&lista)){
printf ("ID: ");
scanf("%d", &av.id);

}

printf ("passageiros: ");
scanf("%d", &av.passageiros);
printf ("comprimento: ");
scanf("%f", &av.comprimento);
printf ("altura: ");
scanf("%f", &av.altura);
printf ("velocidade: ");
scanf("%f", &av.velocidade);
printf ("altitude: ");
scanf("%f", &av.altitude);

printf ("modelo: ");
scanf("%s", av.modelo);

printf ("fabricante: ");
scanf("%s", av.fabricante);

printf ("motor: ");
scanf("%s", av.motor);

inserir(&lista, av);

}

break;
}
}
while(op!='2');

Link para o comentário
Compartilhar em outros sites

  • Solução

Bom, o que ta acontecendo ai é que você tem um return no else, então logo no primeiro elemento a função já retorna um valor mesmo quando não é igual, isso impede que continue procurando nos demais elementos. O que você poderia fazer é colocar o return false; fora do loop, pois caso termine todos os elementos da lista e mesmo assim ainda não retornou quer dizer que não tem essa ID na lista.

 

Espero ter ajudado.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...