Ajuda Listas Duplamente encadeada C

Started by dudosurf, 13 de October , 2008, 10:14:41 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

dudosurf

Ola pessoal... sou inicioante em C e estou fazendo essa lista duplamente encadeada é um exercicio da facul, ainda estou com um pouco de dificuldades mas comecei a fazer a função cadastrar que fica acusando um erro la no case 1: onde está a linha "cadastrar(&inicio, &fim, cod);" se alguem puder ajudar avaliando o programa ficarei grato.


# include <stdio.h>
# include <stdlib.h>
# include <string.h>

typedef struct listaProd{
        int cod_prod;
        char nome[41];
        struct listaProd *ant, *post;       
}Li;

void cadastrar(Li **inicio, Li **fim, Li *novo){
        Li *aux, *p;
        aux=(Li *)malloc(sizeof(Li));
       
        printf("Entre com o nome do Elemento: ");
        scanf("%s", aux->nome);
        printf("Entre com o Codigo: ");
        scanf("%i", &(aux->cod_prod));
           
        if(*fim == NULL){ //Primeiro Elemento da Lista;
                novo->ant = NULL;
                novo->post = NULL;
                *inicio = *fim = novo;
                return;       
        }             
        p = *inicio;  // Começa no Topo da Lista;
        aux = NULL;
        while(p){
                 if(strcmp(p->nome, novo->nome)<0){
                 aux = p;
                 p = p->ant;
                 }
                 else{
                      if(p->post){
                      p->post->ant = novo;
                      novo->ant = p;
                      novo->post = p->post;
                      p->post = novo;
                      return;
                      }
                      novo->ant = p; // Novo primeiro elemento da lista
                      novo->post = NULL;
                      p->post = novo;
                      *inicio = novo;
                      return;
                      }
                 }
                 aux->ant = novo; // Coloca no final
                 novo->ant = NULL;
                 novo->post = aux;
                 *fim = novo;
}
int menu(){
        int escolha;   
        puts("\n\n\n");
        puts(" Escolha uma opcao");
        puts("\n");
        puts(" 1 - Cadastar: ");
        puts(" 2 - Excluir: ");
        puts(" 3 - Imprimir a lista de A a Z: ");
        puts(" 4 - Imprimir a lista de Z a A: ");
        puts(" 0 - sair do programa!!! ");
        puts("\n\n");
        scanf("%i", &escolha);
        return(escolha);
        }   
       
int main()  {
       
        Li *inicio, *fim;
        int escolha, cod;
        inicio = fim = NULL;     
   
        for( ;; ){
        escolha = menu();
        switch (escolha){
               
               case 1:
                    cadastrar(&inicio, &fim, cod);
               break;
               
               case 2:
                    //excluir(&inicio, &fim);
               break;
               
               case 3:
                    //imprimir A a Z();
               break;
               
               case 4:
                    //imprimir Z a A();
               break;
               
               case 0:
                    exit(0);
                    default:
                    printf("**Opção Invalida**\n\n");
               break;
               
               }
               system("PAUSE");
        }
        return 0;
}

nibbles

o erro é porque 'cod' não é um ponteiro e a função cadastrar() está esperando um ponteiro como terceiro parametro para o novo item... 'cod' é um inteiro nada ver que nem ta inicializado :S



"A diversão do inteligente é se fingir de burro para aquele que se finge de inteligente."
"ENGENHARIA SOCIAL. Porque não existe patch para a ignorância humana."