Ir para conteúdo

Arquivado

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

jeancarloss

Minha lista encadeada não imprime.

Recommended Posts

Sou inciante e estou treinando alguns conceitos básicos na faculdade sobre listas encadeadas com ponteiros.

Estou implementando uma lista onde quero fazer cadastro de moradores de um condomínio, onde serão cadastrados o nome e se possuem veículos dentro do apartamento.

Porém na hora que chamo a função imprimir(), simplesmente não acontece nada, embora eu ache que a lógica esteja certa.

Alguém pode me ajudar ?

Segue o código:

 

#include <iostream>

#include <stdlib.h>

#include <string>

using namespace std;

 

struct Morador

{

string nome;

string veiculo;

string placa;

string condominio;

Morador *proximo;

};

struct ListaMoradres

{

Morador *primeiro;

};

 

ListaMoradres lista; // CRIEI UMA LISTA GLOBAL, POIS QUERO QUE A LISTA CONTINUE COM OS CADASTROS MESMO APÓS O FIM DA EXECUÇÃO // DO MAIN (NAO SEI SE TA CERTO FAZER ISSO KKK)

void inciar()

{

lista.primeiro = nullptr;

}

void inserir_Morador()

{

string nome = "";

string veiculo = "";

string placa = "";

string condominio = "";

int op;

 

cout << "Digite o nome do morador\n";

cin >> nome;

cout << "\nPossui veiculo?\n1-SIM\t2-NAO\n";

cin >> op;

switch (op)

{

case 1:

cout << "Carro ou Moto? 1- CARRO\t2- MOTO\n";

cin >> op;

if (op == 1)

{

cout << "Digite placa:\n";

cin >> placa;

veiculo = "(Carro)";

break;

}

else

{

cout << "Digite placa\n";

cin >> placa;

veiculo = "Moto";

break;

}

case 2:

veiculo = "Nao possui";

break;

default:

cout << "Opcao invalida\n";

break;

}

}

if (lista.primeiro == nullptr)

{

Morador *primeiro_Morador = new Morador();

lista.primeiro = primeiro_Morador;

primeiro_Morador->nome = nome;

primeiro_Morador->veiculo = veiculo;

primeiro_Morador->placa = placa;

primeiro_Morador->condominio;

primeiro_Morador->proximo = nullptr;

cout << "Primeiro morador inserido com sucesso\n";

return;

}

else

{

Morador *ultimo = lista.primeiro;

while (ultimo->proximo != nullptr)

ultimo = ultimo->proximo;

Morador *novo = new Morador();

ultimo->proximo = novo;

novo->nome = nome;

novo->veiculo = veiculo;

novo->placa = placa;

novo->condominio = condominio;

novo->proximo = nullptr;

cout << "Morador inserido com sucesso\n";

return;

}

}

void imprimir()

{

Morador *inicio = lista.primeiro;

while (inicio->proximo != nullptr)

{

cout << "\nNome: "+inicio->nome << endl;

cout << "Veiculo: " + inicio->veiculo << endl;

cout << "Placa: " + inicio->placa << endl;

cout << "Condominio: " + inicio->condominio << endl;

inicio = inicio->proximo;

}

return;

}

int main()

{

int op;

cout << "1 - inciazlizar\t2 - inserir\t3 - imprimir\n";

cin >> op;

switch (op)

{

case 1:

inciar();

break;

case 2:

inserir_Morador();

break;

case 3:

imprimir();

break;

default:

cout << "Opcao invalida\n";

break;

}

main();

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só durante o tempo de execução do seu programa que os dados estarão salvos, se não quer perder o conteúdo dele após execução dele use arquivos :)

 

Cara tem bastante erro no seu código, por exemplo o while da funcao imprimir tem de ir até inicio tem de ir até NULL e não inicio->prox == NULL pq ai tu nunca imprimiria o ultimo elemento, quando eu tiver com tempo posso refazer seu código, o que não é o caso agora, como você é iniciante eu recomendo FORTEMENTE não usar variaveis globais.

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.