none
Ajudem Linguagem C - Listas RRS feed

  • Pergunta

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

    #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.

    quinta-feira, 25 de abril de 2013 19:18

Respostas

  • #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 = NULL;
    
    void inserir_livros(int quantos)
    {
        int posicao;
        Livros *q,*p = vetor;
    
        if (quantos >= 1)
        {
            if (p)
            while (!p->prox)
                p = p->prox;
    
            for(posicao = 0 ; posicao < quantos ; posicao++)
            {
                q = (Livros*)malloc(sizeof(Livros));
    
                printf(" Digite o titulo do livro: ");
                gets(q->titulo);
                fflush(stdout);
    
                printf(" Digite o assunto: ");
                gets(q->assunto);
                fflush(stdout);
    
                printf(" Digite o nome do autor: ");
                gets(q->autor);
                fflush(stdout);
    
                printf(" \n");
                fflush(stdin);
    
                if (!p)
                {
                    p = q;
                    vetor = q;
                }
                else
                {
                    p->prox = q;
                    p = q;
                }
    
                p->prox = NULL;
            }
        }
    }
    void listar_livros()
    {
        Livros *p = vetor;
    
        if(!p)
        {
            printf(" \n \n Nao exite nenhum LISTA cadastrada \n \n");
            fflush(stdout);
        }
        else
        for (p = p; p; p = p->prox)
        {
            printf(" Titulo: %s",p->titulo);
            printf("\n ");
            printf("Assunto: %s",p->assunto);
            printf("\n ");
            printf("Autor: %s",p->autor);
            printf("\n ");
        }
    }
    
    int main()
    {
        int qtd;
    
        printf("Quantos Livros deseja cadastrar: ");
        scanf("%d", &qtd);
        fflush(stdout);
    
        fflush(stdin);
    
        inserir_livros(qtd);
        listar_livros();
    
    }

    • Sugerido como Resposta Matgasp sexta-feira, 26 de abril de 2013 18:52
    • Marcado como Resposta The dark night.10013 sexta-feira, 26 de abril de 2013 19:13
    sexta-feira, 26 de abril de 2013 18:50

Todas as Respostas

  • A lógica usada na função inserir_livros() está errada, você está tratando-a como um vetor e não como uma lista simplesmente encadeada.
    • Sugerido como Resposta Matgasp sexta-feira, 26 de abril de 2013 13:26
    sexta-feira, 26 de abril de 2013 13:26
  • Tenho que fazer vetor por causa das variáveis na Struct.

    Você teria Skype para me auxiliar, Obrigado.

    sexta-feira, 26 de abril de 2013 15:54
  • #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 = NULL;
    
    void inserir_livros(int quantos)
    {
        int posicao;
        Livros *q,*p = vetor;
    
        if (quantos >= 1)
        {
            if (p)
            while (!p->prox)
                p = p->prox;
    
            for(posicao = 0 ; posicao < quantos ; posicao++)
            {
                q = (Livros*)malloc(sizeof(Livros));
    
                printf(" Digite o titulo do livro: ");
                gets(q->titulo);
                fflush(stdout);
    
                printf(" Digite o assunto: ");
                gets(q->assunto);
                fflush(stdout);
    
                printf(" Digite o nome do autor: ");
                gets(q->autor);
                fflush(stdout);
    
                printf(" \n");
                fflush(stdin);
    
                if (!p)
                {
                    p = q;
                    vetor = q;
                }
                else
                {
                    p->prox = q;
                    p = q;
                }
    
                p->prox = NULL;
            }
        }
    }
    void listar_livros()
    {
        Livros *p = vetor;
    
        if(!p)
        {
            printf(" \n \n Nao exite nenhum LISTA cadastrada \n \n");
            fflush(stdout);
        }
        else
        for (p = p; p; p = p->prox)
        {
            printf(" Titulo: %s",p->titulo);
            printf("\n ");
            printf("Assunto: %s",p->assunto);
            printf("\n ");
            printf("Autor: %s",p->autor);
            printf("\n ");
        }
    }
    
    int main()
    {
        int qtd;
    
        printf("Quantos Livros deseja cadastrar: ");
        scanf("%d", &qtd);
        fflush(stdout);
    
        fflush(stdin);
    
        inserir_livros(qtd);
        listar_livros();
    
    }

    • Sugerido como Resposta Matgasp sexta-feira, 26 de abril de 2013 18:52
    • Marcado como Resposta The dark night.10013 sexta-feira, 26 de abril de 2013 19:13
    sexta-feira, 26 de abril de 2013 18:50
  • Matgasp, eu postei essa outra dúvida, ta quase dando certo, o projeto é grande. Obrigado.

    Essa dúvida deu 1005 certo.

    http://social.msdn.microsoft.com/Forums/pt-BR/vscmaismaispt/thread/eb8f4b99-8cdd-4949-b74a-d82ad9a29ea5

    sábado, 27 de abril de 2013 21:34