Enviado em 05/03/2017 - 14:48h
Estou com um exercício que faço cadastro de caminhões,cidades,cargas através de uma lista, mas não estou conseguindo salvar em um arquivo (é a ultima função) quando eu seleciono a opção de salvar(#7), ele fecha o programa.#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];
char vizinhos[200];
char distancia[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);
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 - Salvar Caminhao em Arquivo \n");
printf("8 - Excluir Cargas \n");
printf("9 - Excluir Cidades \n");
printf("10 - Relatórios \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:salvacam(&cabeca);
break;
case 8:
break;
case 9:
break;
case 10:
break;
}
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 - Salvar Caminhao em Arquivo \n");
printf("8 - Excluir Cargas \n");
printf("9 - Excluir Cidades \n");
printf("10 - Relatórios \n");
printf("Digite uma opcao: \n");
scanf("%d", &op);
}
}
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){
lcam *noatual;
FILE *arquivo;
arquivo = fopen("Caminhões.txt", "w");
if(arquivo = NULL){
printf("Erro na Abertura do Arquivo");
}
else{
if(noatual == NULL){
fprintf(arquivo,"Lista Vazia!\n");
}
else{
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,"Marca:%s\n", noatual->kml);
noatual = noatual->prox;
}
}
}
fclose(arquivo);
printf("Salvo com Sucesso!");
}
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Dica para encontrar diversos jogos Indies criativos
Instalando Discord no Debian 13
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
A escola é altamente ineficiente e ineficaz! (11)