joaogabriel97 Postado Março 5, 2017 Denunciar Share Postado Março 5, 2017 Boa Noite,estou com um programa que utiliza lista que faz o cadastro de caminhoes,cidades e cargas.Estou tendo problema em salvar a lista em um arquivo.Quando eu seleciono a opção de salvar o programa fecha. OBS:A função de salvar é a ultima. Segue o código: #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,"KM/L:%f\n", noatual->kml); noatual = noatual->prox; } } } fclose(arquivo); printf("Salvo com Sucesso!"); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Nefisto Postado Março 6, 2017 Denunciar Share Postado Março 6, 2017 Ola @joaogabriel97, primeiro creio q o seu problema seja só que o noAtual nao esta na heap, e nem se quer foi iniciado, e vc perguntar se um ponteiro iniciado pelo sistema é NULL pode gerar erros bem complicados. void salvacam(lcam **cabeca){ lcam *noatual; noatual = *cabeca; FILE *arquivo; arquivo = fopen("Caminhões.txt", "a+"); 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,"KM/L:%f\n", noatual->kml); noatual = noatual->prox; } } } // fclose(arquivo); printf("Salvo com Sucesso!"); } Espero que isso resolva seu problema, porem mto cuidado com oq esta fazendo, apesar de o caminho certo ser esse, vc esta complicando mto uma coisa q por natureza já não é tao simples. Mas o caminho é esse aew ;P pelo menos eu acho q é hehe Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
joaogabriel97
Boa Noite,estou com um programa que utiliza lista que faz o cadastro de caminhoes,cidades e cargas.Estou tendo problema em salvar a lista em um arquivo.Quando eu seleciono a opção de salvar o programa fecha.
OBS:A função de salvar é a ultima.
Segue o código:
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.