Ir ao conteúdo
  • Cadastre-se

Dúvida em código de lista encadeada em c


Ir à solução Resolvido por vhscampos,

Posts recomendados

Olá, eu tenho que fazer uma lista encadeada que pega dados do usuário utilizando funções como add, list e etc, mas no código que eu fiz, no comando list, a listagem aparece um número totalmente nada a ver à frente dos adicionados, poderiam me ajudar a solucionar?
 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
struct Lista{
    int num;
    struct Lista *proximo;
};
 
struct Lista * cria(void)
{
    return NULL;
}
 
struct Lista * add(struct Lista *l, int num)
{
    struct Lista *novo = (struct Lista*)malloc(sizeof(struct Lista));
    novo->num = num;
    if(l == NULL)
    {
        novo->proximo = NULL;
        return novo;
    }
    else
    {
        struct Lista *temp = l;
        while(temp->proximo != NULL)
        {
            temp = temp->proximo;
        }
        novo->proximo = NULL;
        temp->proximo = novo;
        return l;
        
    }
}
 
void list(struct Lista *l)
{
    struct Lista *p;
    for(p=l;p!=NULL;p=p->proximo)
    {
        printf("%d ", p->num);
    }
}
 
main()
{
    int num;
    char *cmd;
    char string_enter[50];
    struct Lista *l;
    l = cria();
    l = add(l,num);
    
    do
    {
        gets(string_enter);
        cmd = strtok(string_enter," ");
        num = atoi((char *)strtok(NULL," "));
 
        if(strcmp(cmd,"add")== 0){
            add(l,num);
            continue;
        }
        else if(strcmp(cmd,"list")== 0){
            list(l);
            continue;
        }
    }while(strcmp(cmd,"end")!= 0);
    system("pause");
    
    
}
Link para o comentário
Compartilhar em outros sites

Observe que você adiciona o nodo cabeça à lista com a instrução:

 

l = add(l,num);

 

A função add adiciona o nodo cabeça à lista, e atribui novo->num = num. O problema é que a variável num (na função main) começa sem valor (int num). Variáveis no programa possuem valor imprevisível até você dar algum valor explicitamente. Portanto o número dentro do nodo cabeça recebe lixo da memória.

 

int num; // num pode ter qualquer valor, imprevisível.

int num = 0; // agora sim, num tem um valor que você quis.

 

Existem duas soluções. Primeiramente você precisa definir o valor de num na função main. E melhor ainda, na função list, você deve pular o primeiro nodo, uma vez que ele é o cabeça e por isso seu número não significa nada.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...