Ir para conteúdo

Arquivado

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

willrapha

Validação de um campo da lista

Recommended Posts

Bom dia galera, sou novo no fórum

 

Estou com um problema em uma validação queria uma força de vocês

 

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');

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

#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;
 
bool IdRepetido(int id, const LISTA * lista) {
   int i;
   // Sim, um for vazio é estranho, mas lembre-se que vc pode utilizar várias condições na segunda parte.
   for(i=0; i < lista->nElementos && id!=lista->vetor[i].id; i++);
   return (i < lista->nElementos);
}
 
int inserir(LISTA *lista) {
    int tmp_id;
    bool repeated_status;
 
    do {
     printf ("ID: ");
     scanf("%d", &tmp_id);
     repeated_status = IdRepetido(tmp_id, lista);
     if (repeated_status)
          puts("ID repetido. Informe novamente.");
    } while (repeated_status);
 
    AVIAO * av_ref = &(lista->vetor[lista->nElementos]);
 
    av_ref->id = tmp_id;
 
printf ("passageiros: ");
scanf("%d", &(av_ref->passageiros));
 
printf ("comprimento: ");
scanf("%f", &(av_ref->comprimento));
 
printf ("altura: ");
scanf("%f",&(av_ref->altura));
 
printf ("velocidade: ");
scanf("%f", &(av_ref->velocidade));
 
printf ("altitude: ");
scanf("%f", &(av_ref->altitude));
 
printf ("modelo: ");
scanf("%8s", av_ref->modelo);
 
printf ("fabricante: ");
scanf("%30s", av_ref->fabricante);
 
printf ("motor: ");
scanf("%10s", av_ref->motor);
 
lista->nElementos = lista->nElementos + 1;
return lista->nElementos; // Costume de ver métodos do Java. Normalmente eles retornam o tamanho da estrutura.
}
 
int main() {
   char op=0;
 
  /* Verifique se o padrão da linguagem que vc está utilizando suporta isso.
   * http://stackoverflow.com/questions/225089/why-cant-we-initialize-members-inside-a-structure
   */
   LISTA lista = { .nElementos=0 };
   
 
do {
puts("1 - Inserir");
puts("2 - Sair");
printf("Opção: ");
scanf("%c", &op);
 
if (op == '1') {
inserir(&lista);
} else if (op == '2') {
puts("Saindo da aplicação...");
} else {
puts("Opção inválida.");
}
} while (op!= '2');
 
return 0;
}

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.