Quem descobrir o erro me explique por gentileza o que está errado.
/*==========================================================================
LISTA ENCADEADA
==========================================================================*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
//struct para o nodo da lista encadeada
//Neste modo dev\e ter um ponteiro que aponta para o tipo da lista
struct dados_produto
{
int cod_produto;
char nome[20];
float valor;
struct dados_produto *prox; //ponteiro para o pr�ximo modo
};
//variaveis globais e prototipos das funcoes
int codigo=0;
struct dados_produto *raiz; //para o ponto de partida da lista
struct dados_produto *paux; //ponteiro auxiliar
void incluir();
void incluir_fim();
void incluir_ordenado();
void excluir();
void listar();
int main()
{
char opcao;
raiz = NULL; //raiz recebe nulo no inicio do programa
do
{
system("cls");
printf(" MENU\n");
printf("\nI - inclui elementos no INICIO da lista");
printf("\nM - inclui elementos no FIM da lista");
printf("\nO - inclui elementos no ORDENADOS da lista");
printf("\nE - exclui elementos da lista");
printf("\nL - listagem");
printf("\nS - sair\n\n");
printf("\nDigite a opcao: ");
opcao = getch();
opcao = toupper(opcao);
switch(opcao)
{
case 'I': incluir();
break;
case 'M': incluir_fim();
break;
case 'O': incluir_ordenado();
break;
case 'E': excluir();
break;
case 'L': listar();
break;
case 'S': break;
default: printf("opcao invalida");
getch(); //parada de tela
}
}while(opcao != 'S');
return 0;
}// main
/*------------------------------------------------------------------------
Este procedimento do inclusao esta incluindo elementos no inicio, sem
considerar se o valor a ser incluido j� existe ou nao, simplesmente
inclui no inicio, entao eh um procedimento de inclusao de +*********+
| PILHA |
+*********+
-------------------------------------------------------------------------*/
void incluir()
{
struct dados_produto *pnovo;
system("cls");
printf("=============================================================\n");
printf(" PROCEDIMENTO DE INCLUSAO NO INICIO DA LISTA\n");
printf("=============================================================\n");
pnovo = (struct dados_produto*) malloc(sizeof(struct dados_produto));//parte mais importante
printf("\nDigite o nome: ");
fflush(stdin); //limpeza de buffer
gets(pnovo->nome);
printf("\nDidite o valor: ");
fflush(stdin); //limpeza de buffer
scanf("%f",&pnovo->valor);
pnovo->cod_produto = ++codigo; //codigo auto inclementavel
//faz o ponteiro de novo nodo apontar para onde a raiz
pnovo->prox = raiz;
//faz a raiz apontar para este novo elemento
raiz = pnovo;
printf("\n ELEMENTO INCLUIDO");
getch();
}
/*------------------------------------------------------------------------
Este procedimento do inclusao esta incluindo elementos no fim, sem
considerar se o valor a ser incluido j� existe ou nao, simplesmente
inclui no fim, entao eh um procedimento de inclusao de +*********+
| FILA |
+*********+
-------------------------------------------------------------------------*/
void incluir_fim()
{
struct dados_produto *pnovo, *pant;
system("cls");
printf("=============================================================\n");
printf(" PROCEDIMENTO DE INCLUSAO NO FIM DA LISTA\n");
printf("=============================================================\n");
pnovo = (struct dados_produto*) malloc(sizeof(struct dados_produto));//parte mais importante
printf("\nDigite o nome: ");
fflush(stdin); //limpeza de buffer
gets(pnovo->nome);
printf("\nDidite o valor: ");
fflush(stdin); //limpeza de buffer
scanf("%f",&pnovo->valor);
pnovo->cod_produto = ++codigo; //codigo auto inclementavel
pnovo->prox = NULL; //porque este ser� o ultimo elemento da lista
if (raiz == NULL)
//faz a raiz apontar para o proximo elemento
raiz = pnovo;
else
{
paux = raiz;
while(paux->prox != NULL)
{
paux=paux->prox;
}
paux->prox = pnovo;
}
printf("\n ELEMENTO INCLUIDO");
getch();
}
/*------------------------------------------------------------------------
Este procedimento do inclusao esta incluindo elementos ordenados por
nome, entao o elemento pode ser incluido no inicio, no meio ou no fim
, pois o criterio de insercao e definido pelo nome (Externo a Estrutura
de Dados), entao eh um procedimento de inclusao de +*********+
| PILHA |
+*********+
-------------------------------------------------------------------------*/
void incluir_ordenado()
{
}
void excluir()
{
int cod_aux;
struct dados_produto *pant;
system("cls");
printf("=============================================================\n");
printf(" PROCEDIMENTO DE EXCLUSAO\n");
printf("=============================================================\n");
printf("\n Informe o codigo a excluir: ");
fflush(stdin);
scanf("%d",&cod_aux);
pant = NULL;
paux = raiz;
while ((paux != NULL) && (paux->cod_produto != cod_aux))
{
pant = paux;
paux = paux->prox;
}
if (paux == NULL)
printf("\nCodigo '%d' nao existe na linha",cod_aux);
else
{
if (paux == NULL)//significa que eh o primeiro elemento
raiz = paux->prox;
else
pant->prox = paux->prox;
free(paux); //libera memoria que o nodo ocupava
printf("\nelemento excluido");
}
getch();
}
void listar()
{
system("cls");
printf("=============================================================\n");
printf(" PROCEDIMENTO DE LISTAGEM\n");
printf("=============================================================\n");
printf("\nEnder da raiz....: %p",raiz);
if (raiz == NULL)
{
printf("\nLISTA VAZIA");
}
else
{
paux = raiz;
while (paux != NULL)
{
printf("\n-------------------------------------------------");
printf("\nEnder deste nodo..: %p",paux);
printf("\ncod_produto.......: %d",paux->cod_produto);
printf("\nnome..............: %s",paux->nome);
printf("\nvalor.............: %f",paux->valor);
printf("\nEnder do prox.....: %p",paux->prox);
paux = paux->prox;//assume o endereco do proximo nodo
}
}
getch(); //parada em tela
}