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;
}
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