Pessoal, estou com problemas para rodar esse programa. O compilador não apresenta erro mas quando é executada, o terminal encerra a execução no momento em que a função de inserção é chamada
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
char nome[10];
int codigo;
float preço;
}Tproduto;
typedef struct lista {
Tproduto produto;
struct lista* prox;
}TLista;
typedef TLista* PLista;
TLista* inicializa_lista(){
return NULL;
}
PLista Insere_ord (PLista l, Tproduto dado){
PLista novo;
PLista ant = NULL;
PLista ptaux = l;
novo = (TLista*) malloc(sizeof(TLista));
novo->produto = dado;
while ((ptaux!=NULL) && (ptaux->produto.codigo)< dado.codigo){
ant = ptaux;
ptaux = ptaux->prox;
}
if (ant == NULL){
novo->prox = l;
l = novo;
}
else{
novo->prox = ant->prox;
ant->prox = novo;
}
return l;
}
float busca_produto (PLista lista, int v){
PLista p;
for (p=lista; p!=NULL; p=p->prox)
if (p->produto.codigo == v)
return p->produto.preço;
printf("produto não encontrado\n");
return 0;
}
PLista retira (PLista lista, char v){
PLista ant = NULL;
PLista p;
/* procura elemento na lista, guardando anterior */
for (p=lista;p!=NULL && strcmp(v,lista->produto.nome)!=0; p = p->prox)
ant = p;
/* verifica se achou elemento */
if (p == NULL)
return lista; /* n�o achou: retorna lista original */
/* retira elemento */
if (ant == NULL)
/* retira elemento do inicio */
lista = p->prox;
else
/* retira elemento do meio da lista */
ant->prox = p->prox;
free(p);
return lista;
}
void imprime (PLista lista){
PLista p; /* vari�vel auxiliar para percorrer a lista */
for (p = lista; p != NULL; p = p->prox)
printf("nome codigo preço\n");
printf(" %s %d R$%.2f", p->produto.nome, p->produto.codigo, p->produto.preço);
printf("\n");
}
void Destroi_lista (PLista lista){
PLista p = lista, t;
while (p != NULL){
t = p->prox; /* guarda refer�ncia para o pr�ximo elemento*/
free(p);
p = t; /* faz p apontar para o pr�ximo */
}
}
int main(){
PLista LISTA;
Tproduto produto;
char name, nome_excluir;
int codigo, d=0, consulta;
float preço;
while(d!=-1){
printf("digite o nome do produto\n");
scanf(" %s" , &name);
printf("digite o codigo do produto\n");
scanf(" %d" , &codigo);
printf("entre com o preço do produto\n");
scanf(" %.2f" , &preço);
strcpy(produto.nome,name);
produto.codigo = codigo;
produto.preço = preço;
LISTA = Insere_ord(&LISTA, produto);
printf("deseja continuar inserindo?\ndigite -1 para sair\n");
scanf("%d", &d);
}
printf("digite o codigo do produto para consultar seu preço\n");
scanf("%d" , &consulta);
float encontrado;
encontrado = busca_produto(LISTA, consulta);
printf("o preço do produto procurado é ** %.2f\n", encontrado);
printf("digite o nome do produto que deseja excluir\n");
gets(nome_excluir);
retira(LISTA, nome_excluir);
Destroi_lista;
return 0;
}