I am with a program that registers trucks, loads and cities through a list. I was trying to remove the truck list, but when I remove it, the insertion still continues, as if I had not removed anything. What am I missing (is it the last function)?
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
typedef struct caminhoes{
int id;
char motorista[200];
char marca[200];
char la[200];
char lisd[200];
float kml;
struct caminhoes *prox;
}lcam;
typedef struct cargas{
int id;
char produto[200];
char origem[200];
char destino[200];
float vfrete;
struct cargas *prox;
}lcar;
typedef struct cidades{
int id;
char nome[200];
float vc;
struct cidades *prox;
}lcid;
void cad_cam(lcam **cabeca);
void cad_car(lcar **carcabeca);
void cad_cid(lcid **cidcabeca);
void imp_cam(lcam *cabeca);
void imp_car(lcar *carcabeca);
void imp_cid(lcid *cidcabeca);
void salvacam(lcam **cabeca);
void salvacar(lcar **carcabeca);
void salvacid(lcid **cidcabeca);
int main()
{
setlocale(LC_ALL, "Portuguese");
lcam *cabeca = NULL;
lcam *noatual;
lcar *carcabeca = NULL;
lcar *carnoatual;
lcid *cidcabeca = NULL;
lcid *cidnoatual;
int op;
printf("0 - Fechar \n");
printf("1 - Cadastrar Caminhão \n");
printf("2 - Cadastrar Carga \n");
printf("3 - Cadastrar Cidade \n");
printf("4 - Imprimir Caminhão\n" );
printf("5 - Imprimir Cargas\n");
printf("6 - Imprimir Cidades\n");
printf("7 - Excluir Caminhões \n");
printf("8 - Excluir Cargas \n");
printf("9 - Excluir Cidades\n");
printf("Digite uma opcao: \n");
scanf("%d", &op);
while(op!=0)
{
switch(op)
{
case 0:
{
op=0;
break;
}
break;
case 1: cad_cam(&cabeca);
break;
case 2: cad_car(&carcabeca);
break;
case 3: cad_cid(&cidcabeca);
break;
case 4: imp_cam(cabeca);
break;
case 5: imp_car(carcabeca);
break;
case 6:imp_cid(cidcabeca);
break;
case 7:excam(&cabeca);
break;
case 8:
break;
case 9:
break;
}
printf("\n0 - Fechar \n");
printf("1 - Cadastrar Caminhão \n");
printf("2 - Cadastrar Carga \n");
printf("3 - Cadastrar Cidade \n");
printf("4 - Imprimir Caminhão\n" );
printf("5 - Imprimir Cargas\n");
printf("6 - Imprimir Cidades\n");
printf("7 - Excluir Caminhões \n");
printf("8 - Excluir Cargas \n");
printf("9 - Excluir Cidades\n");
printf("Digite uma opcao: \n");
scanf("%d", &op);
}
salvacam(&cabeca);
salvacar(&carcabeca);
salvacid(&cidcabeca);
}
void cad_cam (lcam **cabeca)
{
setlocale(LC_ALL, "Portuguese");
lcam *noatual, *novono;
int id;
char mot[200];
char mar[200];
char loca[200];
char lisd[200];
float kml;
printf("ID:\n");
scanf("%d", &id);
setbuf(stdin, NULL);
printf("Motorista:\n");
scanf("%[^\n]s", &mot);
setbuf(stdin, NULL);
printf("Marca:\n");
scanf("%[^\n]s", &mar);
setbuf(stdin, NULL);
printf("Local Atual:\n");
scanf("%[^\n]s", &loca);
setbuf(stdin, NULL);
printf("Lista de Destinos:\n");
scanf("%[^\n]s", &lisd);
setbuf(stdin, NULL);
printf("KM/L:\n");
scanf("%f", &kml);
setbuf(stdin, NULL);
if (*cabeca == NULL)
{
*cabeca = malloc(sizeof(lcam));
(*cabeca)->id = id;
strcpy((*cabeca)->motorista, mot);
strcpy((*cabeca)->marca, mar);
strcpy((*cabeca)->la, loca);
strcpy((*cabeca)->lisd, lisd);
(*cabeca)->kml = kml;
(*cabeca)->prox = NULL;
}
else
{
noatual = *cabeca;
while(noatual->prox != NULL)
noatual = noatual->prox;
novono = malloc(sizeof(lcam));
novono->id = id;
strcpy(novono->motorista, mot);
strcpy(novono->marca,mar);
strcpy(novono->la,loca);
strcpy(novono->lisd,lisd);
novono->kml = kml;
novono->prox = NULL;
noatual->prox = novono;
}
}
void cad_car (lcar **carcabeca)
{
setlocale(LC_ALL, "Portuguese");
lcar *carnoatual, *carnovono;
int id;
char prod[200];
char ori[200];
char dest[200];
float vf;
printf("ID:\n");
scanf("%d", &id);
setbuf(stdin, NULL);
printf("Produto:\n");
scanf("%[^\n]s", &prod);
setbuf(stdin, NULL);
printf("Origem:\n");
scanf("%[^\n]s", &ori);
setbuf(stdin, NULL);
printf("Destino:\n");
scanf("%[^\n]s", &dest);
setbuf(stdin, NULL);
printf("Valor do Frete:\nR$");
scanf("%f", &vf);
setbuf(stdin, NULL);
if (*carcabeca == NULL)
{
*carcabeca = malloc(sizeof(lcar));
(*carcabeca)->id = id;
strcpy((*carcabeca)->produto, prod);
strcpy((*carcabeca)->origem, ori);
strcpy((*carcabeca)->destino, dest);
(*carcabeca)->vfrete = vf;
(*carcabeca)->prox = NULL;
}
else
{
carnoatual = *carcabeca;
while(carnoatual->prox != NULL)
carnoatual = carnoatual->prox;
carnovono = malloc(sizeof(lcar));
carnovono->id = id;
strcpy(carnovono->produto, prod);
strcpy(carnovono->origem,ori);
strcpy(carnovono->destino,dest);
carnovono->vfrete = vf;
carnovono->prox = NULL;
carnoatual->prox = carnovono;
}
}
void cad_cid (lcid **cidcabeca)
{
setlocale(LC_ALL, "Portuguese");
lcid *cidnoatual, *cidnovono;
int id;
char nome[200];
char viz[200];
char dist[200];
float vac;
printf("ID:\n");
scanf("%d", &id);
setbuf(stdin, NULL);
printf("Nome da Cidade:\n");
scanf("%[^\n]s", &nome);
setbuf(stdin, NULL);
printf("Digite o Valor do Combistível:\nR$");
scanf("%f", &vac);
setbuf(stdin, NULL);
if (*cidcabeca == NULL)
{
*cidcabeca = malloc(sizeof(lcid));
(*cidcabeca)->id = id;
strcpy((*cidcabeca)->nome, nome);
(*cidcabeca)->vc = vac;
(*cidcabeca)->prox = NULL;
}
else
{
cidnoatual = *cidcabeca;
while(cidnoatual->prox != NULL)
cidnoatual = cidnoatual->prox;
cidnovono = malloc(sizeof(lcid));
cidnovono->id = id;
strcpy(cidnovono->nome, nome);
cidnovono->vc = vac;
cidnovono->prox = NULL;
cidnoatual->prox = cidnovono;
}
}
void imp_cam(lcam *noatual)
{
setlocale(LC_ALL, "Portuguese");
while( noatual != NULL)
{
printf("\nID:%d\n", noatual->id);
printf("Motorista:%s\n", noatual->motorista);
printf("Marca:%s\n", noatual->marca);
printf("Local Atual:%s\n", noatual->la);
printf("Lista de Destinos:%s\n", noatual->lisd);
printf("KM/L:%.2f\n", noatual->kml);
noatual = noatual->prox;
}
}
void imp_car(lcar *carnoatual)
{
setlocale(LC_ALL, "Portuguese");
while( carnoatual != NULL)
{
printf("\nID:%d\n", carnoatual->id);
printf("Produto:%s\n", carnoatual->produto);
printf("Origem:%s\n", carnoatual->origem);
printf("Destino:%s\n", carnoatual->destino);
printf("Valor do Frete:R$%.2f\n", carnoatual->vfrete);
carnoatual = carnoatual->prox;
}
}
void imp_cid(lcid *cidnoatual)
{
setlocale(LC_ALL, "Portuguese");
while( cidnoatual != NULL)
{
printf("\nID:%d\n", cidnoatual->id);
printf("Nome da Cidade:%s\n", cidnoatual->nome);
printf("Valor do Combustível:%.2f\n", cidnoatual->vc);
cidnoatual = cidnoatual->prox;
}
}
void salvacam(lcam **cabeca)
{
setlocale(LC_ALL, "Portuguese");
lcam *noatual;
FILE *arquivo;
arquivo = fopen("Caminhões.txt", "w");
if(arquivo == NULL)
{
printf("Erro na Abertura do Arquivo");
}
else
{
noatual = *cabeca;
if(noatual == NULL)
{
fprintf(arquivo,"Lista Vazia!\n");
}
else
{
noatual = *cabeca;
while(noatual != NULL)
{
fprintf(arquivo,"ID:%d\n", noatual->id);
fprintf(arquivo,"Motorista:%s\n", noatual->motorista);
fprintf(arquivo,"Marca:%s\n", noatual->marca);
fprintf(arquivo,"Local Atual:%s\n", noatual->la);
fprintf(arquivo,"Lista de Destinos:%s\n", noatual->lisd);
fprintf(arquivo,"KM/L:%.2f\n", noatual->kml);
fputc('\n', arquivo);
noatual = noatual->prox;
}
}
}
fclose(arquivo);
printf("\nSalvo com Sucesso!");
}
void salvacar(lcar **carcabeca)
{
setlocale(LC_ALL, "Portuguese");
lcar *carnoatual;
FILE *arquivo;
arquivo = fopen("Cargas.txt", "w");
if(arquivo == NULL)
{
printf("Erro na Abertura do Arquivo");
}
else
{
carnoatual = *carcabeca;
if(carnoatual == NULL)
{
fprintf(arquivo,"Lista Vazia!\n");
}
else
{
carnoatual = *carcabeca;
while(carnoatual != NULL)
{
fprintf(arquivo,"ID:%d\n", carnoatual->id);
fprintf(arquivo,"Produto:%s\n", carnoatual->produto);
fprintf(arquivo,"Origem:%s\n", carnoatual->origem);
fprintf(arquivo,"Destino:%s\n", carnoatual->destino);
fprintf(arquivo,"Valor do Frete:R$%.2f\n", carnoatual->vfrete);
fputc('\n',arquivo);
carnoatual = carnoatual->prox;
}
}
}
fclose(arquivo);
printf("\nSalvo com Sucesso!");
}
void salvacid(lcid **cidcabeca)
{
setlocale(LC_ALL, "Portuguese");
lcid *cidnoatual;
FILE *arquivo;
arquivo = fopen("Cidades.txt", "w");
if(arquivo == NULL)
{
printf("Erro na Abertura do Arquivo");
}
else
{
cidnoatual = *cidcabeca;
if(cidnoatual == NULL)
{
fprintf(arquivo,"Lista Vazia!\n");
}
else
{
cidnoatual = *cidcabeca;
while(cidnoatual != NULL)
{
fprintf(arquivo,"ID:%d\n", cidnoatual->id);
fprintf(arquivo,"Nome da Cidade:%s\n", cidnoatual->nome);
fprintf(arquivo,"Valor do Combustível:%.2f\n", cidnoatual->vc);
fputc('\n',arquivo);
cidnoatual = cidnoatual->prox;
}
}
}
fclose(arquivo);
printf("\nSalvo com Sucesso!");
}
void excam(lcam **cabeca)
{
setlocale(LC_ALL, "Portuguese");
lcam *noatual;
noatual = *cabeca;
if(noatual == NULL)
{
printf("Lista Vazia!");
}
else
{
noatual = *cabeca;
noatual = noatual->prox;
free(noatual);
}
}