Ir ao conteúdo

Varrer uma lista


FebenSss

Posts recomendados

Postado

Boa tarde galera, criei uma lista no meu exercício porém quando consulto os cadastros feitos nessa lista, ele só me mostra o ultimo cadastro, o primeiro cadastro que faço ele não mostra, queria criar uma função para varrer a lista para poder encontrar esse cadastro, qualquer ajuda agradeço.

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

//Estrutura de Voo.
struct voo{
int numeroVoo;
char dataVoo[8];
char horarioVoo[5];
char aeroSaida[50];
char aeroChegada[50];
int rota;
char tempoVoo[5];
int passageirosBordo;
};

//Cabeçalho das Funções.
void menu();
void cadastrarVoo();
void consultarVoo();
void removerVoo();
struct voo *ponteiro;

//Função de MENU.
void menu(){
int opMenu;

printf("\n\n\t_________________________");
printf("\n\t MENU PRINCIPAL");
printf("\n\t ESCOLHA SUA OPCAO");
printf("\n\t------------------------\n\n");

printf("\n\t1- CADASTRAR VOO.");
printf("\n\t2- CONSULTAR VOO.");
printf("\n\t3- REMOVER VOO.");
printf("\n\t4- SAIR.\n\n");
printf("\n\tOPCAO: ");
scanf("%d",&opMenu);
system("cls");
switch (opMenu){
case 1:
cadastrarVoo();
break;
case 2:
consultarVoo();
break;
case 3:
removerVoo();
break;
case 4:
printf("\n\n\tVOCE FOI DESLOGADO\n\n");
break;
default:
printf("\n\tOPCAO INVALIDA, TENTE NOVAMENTE\n\n");
system("pause");
system("cls");
menu();
break;
}
}

//Função de Cadastro de Voo.
void cadastrarVoo(){
int opCadastro;
do{
ponteiro = (struct voo *)malloc (sizeof(struct voo));

printf("\n\n\t________________________");
printf("\n\t MENU CADASTRAR VOO.");
printf("\n\t------------------------\n\n");

printf("\n\tNUMERO DO VOO: ");
scanf("%d",&ponteiro->numeroVoo);
printf("\tDATA DO VOO: ");
scanf("%s",ponteiro->dataVoo);
printf("\tHORARIO DO VOO: ");
scanf("%s",ponteiro->horarioVoo);
printf("\tAEROPORTO DE SAIDA: ");
scanf("%s",ponteiro->aeroSaida);
printf("\tAEROPORTO DE CHEGADA: ");
scanf("%s",ponteiro->aeroChegada);
printf("\tROTA: ");
scanf("%d",&ponteiro->rota);
printf("\tTEMPO ESTIMADO DO VOO: ");
scanf("%s",ponteiro->tempoVoo);
printf("\tQNT DE PASSAGEIROS: ");
scanf("%d",&ponteiro->passageirosBordo);
system("cls");
printf("\n\n\t1- CADASTRAR OUTRO VOO");
printf("\n\t2- VOLTAR AO MENU\n\n");
printf("\tOPCAO: ");
scanf("%d",&opCadastro);
system("cls");
}
while(opCadastro!=2);
system("cls");
menu();
}

//Função de Consulta Voo.
void consultarVoo(){
int opConsultar;
printf("\n\n\t________________________");
printf("\n\t MENU CONSULTAR VOO.");
printf("\n\t------------------------\n\n");

printf("\n\tDIGITE O NUMERO DO VOO\n");
printf("\n\tNUMERO DO VOO: ");
scanf("%d",&opConsultar);
if(ponteiro->numeroVoo!=opConsultar){
printf("\n\tREGISTRO DE VOO NAO ENCONTRADO");
printf("\n\t TENTE NOVAMENTE\n\n");
system("pause");
system("cls");
consultarVoo();
}
else{
printf("\n\n\tNUMERO DO VOO ENCONTRADO!!!\n\n");
printf("\n\t------------------------------------------------");
printf("\n\tNUMERO DO VOO:%d ",ponteiro->numeroVoo);
printf("\n\tDATA DO VOO:%s ",ponteiro->dataVoo);
printf("\n\tHORARIO DO VOO:%s ",ponteiro->horarioVoo);
printf("\n\tAEROPORTO DE SAIDA:%s ",ponteiro->aeroSaida);
printf("\n\tAEROPORTO DE CHEGADA:%s ",ponteiro->aeroChegada);
printf("\n\tROTA:%d ",ponteiro->rota);
printf("\n\tTEMPO ESTIMADO DE VOO:%s ",ponteiro->tempoVoo);
printf("\n\tQNT DE PASSAGEIROS:%d ",ponteiro->passageirosBordo);
printf("\n\t------------------------------------------------\n\n");
printf("\n\t TECLE ENTER PARA RETORNAR AO MENU...\n\n\n");
system("pause");
system("cls");
menu();
}
}

//Função de Remover Voo.
void removerVoo(){
printf("\n\n\t________________________");
printf("\n\t MENU REMOVER VOO.");
printf("\n\t------------------------\n\n");

printf("\n\tDIGITE O NUMERO DO VOO QUE DESEJA REMOVER");
printf("\n\tNUMERO DO VOO: ");
}



int main(int argc, char *argv[])
{
menu(); //Chamando função de MENU.

system("PAUSE");
return 0;
}

Postado

Na sua função de consulta, você está verificando se o número do último vôo registrado é igual ao número digitado pelo usuário.

Você deve varrer a lista (está funcionando, segundo você) e verificar, para cada elemento, se o número do vôo digitado pelo usuário é igual ao número daquele vôo.

Quando houver a igualdade (número do vôo do usuário igual ao número do vôo de algum elemento da lista) você deve fazer seu programa entender que o elemento buscado foi alcançado.

Caso não haja nenhuma equivalência, não há vôo registrado com o número digitado pelo usuário.

Boa sorte! Qualquer dúvida, basta perguntar.

Postado

Desculpe, falha minha. Eu tive a impressão de ter lido que você havia conseguido implementar a função de listagem dos vôos.

Para varrer a lista, antes de mais nada, você deve TER uma lista. O conceito de lista envolve elementos ligados uns aos outros. A implementação se dá a partir do momento em que você possui, dentro de cada elemento da lista, ao menos um ponteiro que aponta para outro elemento.

A sua definição de sua estrutura deve ter um ponteiro para outro elemento da estrutura.

struct voo {
// [...] Suas definições

struct voo *proximo;
};

Neste tópico eu lhe dei a base da ideia, nas respostas #4 e #6. Nesta, inclusive, um modelo de como varrer a lista.

Postado

Então wilk estou com sérios problemas para compreender essa parte, mesmo você me passando materias que provavelmente tem a resposta que quero, não sei como emplementa-la no programa.

Nessa parte do meu programa abaixo, eu pesquiso um cadastro feito.

scanf("%d",&opConsultar);
if (opConsultar!=ponteiro->numeroVoo){
printf("\n\tREGISTRO DE VOO NAO ENCONTRADO");
printf("\n\t TENTE NOVAMENTE\n\n");
system("pause");
system("cls");
consultarVoo();
}
else{
printf("\n\n\tNUMERO DO VOO ENCONTRADO!!!\n\n");
printf("\n\t------------------------------------------------");
printf("\n\tNUMERO DO VOO:%d ",ponteiro[i].numeroVoo);
printf("\n\tDATA DO VOO:%s ",ponteiro[i].dataVoo);
printf("\n\tHORARIO DO VOO:%s ",ponteiro[i].horarioVoo);
printf("\n\tAEROPORTO DE SAIDA:%s ",ponteiro[i].aeroSaida);
printf("\n\tAEROPORTO DE CHEGADA:%s ",ponteiro[i].aeroChegada);
printf("\n\tROTA:%d ",ponteiro[i].rota);
printf("\n\tTEMPO ESTIMADO DE VOO:%s ",ponteiro[i].tempoVoo);
printf("\n\tQNT DE PASSAGEIROS:%d ",ponteiro[i].passageirosBordo);
printf("\n\t------------------------------------------------\n\n");
printf("\n\t TECLE ENTER PARA RETORNAR AO MENU...\n\n\n");
system("pause");
system("cls");
menu();
}

Eu compreendo que o meu ponteiro da lista aponta para o ultimo cadastro feito, então se eu for querer consultar o primeiro cadastro que fiz, ele não vai aparecer as informações, mais não consigo de jeito nenhum faz aparecer as informações dos cadastros feitos anteriormente, já tentei fazer as alterações e inserções que você me passou, mais não consegui, por favor me de mais uma luz :D

Postado

A grande questão, para você, é implementar uma lista ligada. Como seu programa está hoje, ele não implementa tal.

Tente pesquisar um pouco sobre Listas Ligagas (Linked Lists) em C. Caso você estude e, mesmo assim, não tenha êxito, ajudarei mais.

Estude e poste aqui o que você conseguir fazer.

Arquivado

Este tópico foi arquivado e está fechado para 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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!