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

[code]#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();

}[/code]

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

Por favor me ajudem!

Obrigado.

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 = …

Não entendi seje mais claro.
Valeu.

É 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?

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

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

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.

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: