Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Com Lista Encadeada


Pirituba

Pergunta

beleza galera, é o seguinte:

Estou fazendo uma lista encadeada, mas toh com o seguinte problema quando faço o inserir dentro da minha função main ele roda normal e parece que a inserção vai rolar sem problemas, mas quando faço uma função para fazer isso é como se a o ponteiro lista sempre apontasse pra NULL...o codigo está assim

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

typedef struct dados{

float chave;

char nome[40];

char telefone[20];

char status[3];

struct dados *prox;

}registro;

void nova_lista(registro *lista);

void inserir(registro *lista);

int lista_vazia(registro *lista);

int testa_chave(float teste);

registro *lista;

int main(void){

int menu;

do{

do{

system("cls");

puts("[1]Inicializa uma nova lista.");

puts("[2]Busca e imprime registro de reserva.");

puts("[3]Insercao de nova reserva.");

puts("[4]Remocao de reserva.");

puts("[5]Listar todas as reservas cadastradas.");

puts("[6]Listar todas as reservas com status em comum.");

puts("[7]Sair.");

scanf("%d",&menu);

switch(menu){

case 1 :

nova_lista(lista);

printf("\nUma nova lista foi criada!\n");

system("pause");

break;

case 2 :

break;

case 3 :

inserir(lista);

break;

case 4 :

break;

case 5 :

break;

case 6 :

break;

case 7 :

return(0);

}

}while(menu<1 || menu>7);

}while(menu>0 && menu<8);

}

void inserir(registro *lista){

if(lista==NULL){

puts("nulo!");

lista=(registro*)malloc(sizeof(registro));

lista->chave=1000;

lista->prox=NULL;

}else{

puts(" não nulo!");

//o problema aqui é que sempre que chama-se a função inserir o valor de lista é NULL

//mesmo depois da primeira alteração, quando faço essa rotina no main isso não acontece...porque?

//será que o problema está na passagem dos parametros

}

}

void nova_lista(registro *lista){

lista=NULL;

}

int lista_vazia(registro *lista){

if(lista==NULL)return(1);

else return(0);

}

int testa_chave(float teste){

if(teste>0 && teste<1000000)return(1);

else return(0);

}

:D valeu pela força...abraços

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

por causa dessa linha:

 lista=(registro*)malloc(sizeof(registro));

quando voce faz isso malloc retorna um ponteiro para lista, que será diferente do ponteiro recebido pelo parametro, ou seja, voce altera o endereco de referencia da lista.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...