willrapha 0 Denunciar post Postado Setembro 17, 2014 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
_Isis_ 202 Denunciar post Postado Setembro 17, 2014 #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
willrapha 0 Denunciar post Postado Setembro 17, 2014 Obrigado logica fantástica Compartilhar este post Link para o post Compartilhar em outros sites