Jump to content
joaoufms

Salvar lista em arquivo

Recommended Posts

Boa Noite,estou com um programa de 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.

 

#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 você;
	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)->você = 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->você = 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->você);
        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!");
}

 

Share this post


Link to post
Share on other sites
void menu() {
   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");
}

int main() {
	
    lcam *cabeca = NULL;        
    lcam *noatual;    
	
	lcar *carcabeca = NULL;
	lcar *carnoatual; 
	
	lcid *cidcabeca = NULL;
	lcid *cidnoatual;
    
    int op;
	
    while(1){
       menu();
       scanf("%d", &op);
       if (op == 0) break;

 	   switch(op) {
            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;
            default: printf("Opção inválida\n");        
        }
    }
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By nixfb
    • By pachecok
      Estou iniciando em programação e tenho um trabalho em C que devo:
       
      Construir um programa que leia uma matriz 7x7 de inteiros.
      Após a leitura, calcular o somatório apenas dos elementos abaixo destacados da matriz lida.
      Mostre, os elementos destacados e o somatório.
       
      A soma deve ser entre as posições da matriz refentes a imagem em anexo. 
      É esta a dificuldade que eu encontrei, não sei os passos para realizar esta soma em específico então provavelmente a minha tentativa abaixo foi bizarra. 
       
      Alguém poderia me ajudar? Agradeço desde já. 
       
      #include<stdio.h> #include<conio.h> #define linha 7 #define coluna 7 int main (void ) { int i, j, matriz[linha][coluna], result, soma; printf ("\nDigite valor para os elementos da matriz\n\n"); for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ printf ("\nElemento[%d][%d] = ", i, j); scanf ("%d", &matriz[ i ][ j ]); } } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ printf ("%i", matriz[i][j]); } printf("\n"); } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ result=result+matriz[i][j]; } } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ soma=soma+matriz[3][3]+matriz[4][2]+matriz[4][3]+matriz[4][4]+matriz[5][1]+matriz[5][2]+matriz[5][3]+matriz[5][4]+matriz[5][5]+matriz[6][0]+matriz[6][1]+matriz[6][2]+matriz[6][3]+matriz[6][4]+matriz[6][5]+matriz[6][6]; } } printf("\n\nA soma de todos valores da matriz: %d\n", result); printf("\n\nA soma dos valores solicitados: %d\n", soma); }  

    • By Lauts
      programa
      {
          inclua biblioteca Matematica
          
          funcao inicio()
          {
              inteiro hom=0, mul=0, rsim=0, rnao=0, rhsim=0, rmsim=0, n, t=4
              real psim, pnao
              caracter sexo, resp
              (n == t)
          {
              leia ("Informe o Sexo: ", sexo)
              leia ("Gostou do produto (S/N): ", resp)
              se (sexo =='1')
              {
                  hom = hom + 1
                  se (resp == '1')
              {
                  rmnao = rmnao + 1
              }
              }
              senao
              {
                  se (sexo == '2')
              {
                  mul = mul + 1
                  se (resp == '2')
              {
                  rhsim = rhsim + 1    
              }    
              }
              }
                  se (resp == '1')
              {
                  rsim = rsim +1            
              }
                  senao
              {
                  se (resp == '2')
              {
                  rnao = rnao +1
              }
              }
          n = n  + 1
          }
              psim = 100 * (rmsim / t)
              pnao = 100 * (rhnao / t)
          }
              escreva ("Quantidade de pessoas que responderam sim: ", rsim)
              escreva ("Quantidade de pessoas que responderam não: ", rnao)
              escreva ("Porcentagem de mulheres que responderam sim: ", psim)
              escreva ("Porcentagem de homens que responderam não: ", pnao)
      }
    • By Kvalo
      estou tentando fazer um programa que verifique 3 valores e informe o maior, o menor e se forem iguais! oq ta errado 
       
      #include<stdio.h>
      #include<stdlib.h>
      #include<locale.h>
      int main()
      {
          setlocale(LC_ALL,"Portuguese");
          int maior,menor;
          float a,b,c;
          printf("\n\tDigite 3 valores: \n");
          scanf("%f%f%f",&a,&b,&c);
          if (a>b&&a>c)
          {
              maior=a;
          }
          else{}
          if (b>a&&b>c)
          {
              maior=b;
          }
          else{}
          if(c>a&&c>b)
          {
              maior=c;
          }
          if (a<b&&a<c)
          {
              menor=a;
          }
          else{}
          if(b<a&&b<c)
          {
              menor=b;
          }
          else{}
          if(c<a&&c<b)
          {
              menor=c;
          }
          else{}
          if (a==b&&b==c&&a==c)
          {
              printf("\n\tValores iguais\n\n");
          }
          else{}
          printf("\n\tO maior é: %d\n\tO menor é: %d\n\n",maior,menor);
          system("pause");
          return 0;
      }
       
    • By vinihhylian0103
      É possível anexar um arquivo e enviá-lo por email via PHP? Se sim, alguém poderia me dar uma ajuda com isso por favor, é realmente muito importante para meu projeto do TCC.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.