Ola galera, estou com uma dúvida em Lista Dinâmica - Linguagem C

7 respostas
T
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct livro
{
	char titulo[40];
	char assunto[40];
	char autor[40];
	int nroRegistro;

	struct livro *prox;
}Livros;

Livros *vetor;

void inicializando()
{
    vetor = NULL;
}

void inserir_livros(int quantos)
{
    int posicao;

    Livros *vetor = (Livros *)malloc(sizeof(Livros));

    for(posicao = 0 ; posicao < quantos ; posicao++)
    {
        printf(" Digite o titulo do livro: ");
        gets(vetor[posicao].titulo);
        fflush(stdout);

        printf(" Digite o assunto: ");
        gets(vetor[posicao].assunto);
        fflush(stdout);

        printf(" Digite o nome do autor: ");
        gets(vetor[posicao].autor);
        fflush(stdout);

        printf(" \n");

        fflush(stdin);
    }
}
void listar_livros()
{
    Livros *aux;
    aux = vetor->prox;

	if(aux==NULL)
	{
	    printf(" \n \n Nao exite nenhum LISTA cadastrada \n \n");
	    fflush(stdout);
	}
	while(aux->prox!=NULL)
	{
 	  printf(" Titulo: %s", aux->titulo);
 	  printf("\n ");
 	  printf("Assunto: %s", aux->assunto);
 	  printf("\n ");
 	  printf("Autor: %s", aux->autor);

 	  printf("\n ");

	  aux=aux->prox;
	}
}

int main()
{
    int qtd;

    printf("Quantos Livros deseja cadastrar: ");
    scanf("%d", &qtd);
    fflush(stdout);

    fflush(stdin);

    inserir_livros(qtd);

    listar_livros();

}

Estou com problema no procedimento void listar_livros(). Quando compilo ele não imprime nada.

Por favor me ajudem!

Obrigado.

7 Respostas

E

Hum, você leu um array de livros, mas não os encadeou na lista ligada na hora que você leu os livros :frowning:

Provavelmente tem de fazer algo como …->prox = …

T

Não entendi seje mais claro.
Valeu.

E

É assim. É pura lógica.

Quando você vai listar os livros, você usa o campo .prox, certo?

Isso quer dizer que o campo prox tem de estar preenchido com um determinado valor.

Que valor é esse? Você deve saber melhor que eu, já que está tendo a matéria agora.

Só que no seu código não vi nenhum lugar onde você põe um valor no campo .prox.

Você tem de botar sua cabeça para funcionar para ver onde e como preencher o campo .prox de cada livro, para formar a lista ligada. Certo?

T

Então não atribui valores porque é uma lista dinâmica, acho que foi isso que você quis dizer.

E

Mais uma dica: o que você tem de fazer é completar o método “inserir_livros” :slight_smile:

E

O seu problema é um exemplo clássico de algo que se manifesta em um método , mas na verdade é outro método que tem problemas. Portanto, veja o que está errado em “inserir_livros”, que é o método bugado; não em “listar_livros”, que não tem mistério e deve estar correto.

Saber fazer isso é uma das coisas que você deve aprender quando está aprendendo qualquer coisa que precisa usar um pouquinho a cabeça - a causa do problema muitas vezes não está onde o problema aparece, e sim em outro lugar.

matheuslmota

Tem outro erro. Ele tá usando um vetor para receber os dados ao invés de uma lista. O método inserir está uma salada.

Aqui ele aloca um vetor com somente uma posição para um livro. Essa alocação é o certo para uma lista, mas está errada para um vetor. Para alocar um vetor, deve ser feito assim:

Além do mais, se é para trabalhar com uma lista, não se deve receber os dados assim:

Aqui está sendo feita a indexação de um vetor, quando o correto seria acessar o prox elemento da lista.

Ajudando um pouquinho mais. A função inserir livro deve fazer duas coisas.
1 - Alocar um livro e preencher com seus valores corretos.
2 - Atribuir ao membro prox do último elemento da lista o ponteiro do livro alocado.

O resto é com o autor do post :smiley:

Criado 25 de abril de 2013
Ultima resposta 26 de abr. de 2013
Respostas 7
Participantes 3