Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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!");
}

 

Compartilhar este post


Link para o post
Compartilhar em outros 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");        
        }
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por biza
      Ola
      Estou  a construir um datalogger em código C.Desta forma necessito passar os dados entre ficheiros. O meu problema está na inclusão de algumas variáveis no topo de um arquivo .txt onde os dados são salvos. Variáveis como tempo de data e hora, id do dispositivo e muito mais... Para isso preciso de ajuda, gostaria que os dados estivessem disponíveis para todos os arquivos, até aí é fácil, basta incluir a variável como extern, no arquivos *.h e incluí-lo em todos os outros que você deseja que a variável esteja disponível. mas como posso fazer para ter acesso a ele dentro do array que preciso?
      Exemplo: main.c
      #include "main.h" char dateTimeFormat[24]; void main(void){ dateTimeFormat = "22-02-22 13:23:04"; } main.h
      extern char dateTimeFormat[24];  
      teste.c
       
      #include "main.h" extern char dateTimeFormat[24]; /*Header .txt file initialization*/ volatile char headerFile[] ="\n\n" "# HEALT MONITORING SYSTEM \r\n" "# DEVELOPED: BIZA \r\n" "# VERSION: B \r\n" "# DATATIMECAPTURE:"+dateTimeFormat+ "\r\n" "# SAMPLINGFREQUENCY: 500 \r\n" "# SAMPLECHANNELS: 1 2 3 4 5 6 7 8 \r\n" "# SAMPLINGRESULUTION: 24 \r\n" "# IDDEVICE: HEALTHY \r\n" "# ENDOFHEADER  
      Como posso incluir a variável "dateTimeFormat" dentro do headerFile como descrevi acima?
       
    • Por oromotoceu
      #include <stdio.h>
      #include <stdlib.h>
      #define MAXTAM 1000
      int Frente, Tras, Lista[MAXTAM];
      void Lista_Construtor(){
      Frente=0;
      Tras=-1;
      }
      int Lista_Vazia(){
      if(Tras==-1)
      return 1;
      else
      return 0;
      }
      int Lista_Cheia(){
      if(Tras==MAXTAM-1)
      return 1;
      else
      return 0;
      }
      int Lista_Tamanho(){
      return Tras+1;
      }
      int Lista_Inserir_Inicio(int Valor){
      if(Lista_Cheia()){
      return 0;
      }else{
      /*se quero inserir na posição 0,
      vou deslocar todos os elementos para frente*/
      for(int i=Tras+1;i>Frente;i--){
      Lista=Lista[i-1];
      }
      Lista[Frente]=Valor;
      Tras++;
      return 1;
        }
      }
      int Lista_Inserir_Fim(int Valor){
      if(Lista_Cheia()){
      return 0;
      }else{
      Tras++;
      Lista[Tras]=Valor;
      return 1;
        }
      }
      int Lista_Inserir(int Valor, int Posicao){
      if(Lista_Cheia()){
      return 0;
      }else{
      /* Para verificar se a posição
      está no meio da lista */
      if(Posicao>Frente && Posicao<Tras){
      for(int i=Tras+1;i>Posicao;i--){
      Lista=Lista[i-1];
      }
      Lista[Posicao]=Valor;
      Tras++;
      return 1;
      }else{ 
      return 0;
         }
        }
      }
      int Lista_Remover_Inicio(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor =Lista[Frente];
      for(int i=Frente;i<Tras;i++){
      Lista=Lista[i+1];
         }
      Tras--;
        }
      }
      int Lista_Remover_Fim(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Tras];
      Tras--;
      return 1;
        }
      }
      int Lista_Remover(int *Valor, int Posicao){
      if(Lista_Vazia()){
      return 0;
      }else{
      if(Posicao>Frente && Posicao<Tras){
      *Valor=Lista[Posicao];
      for(int i=Posicao;i<Tras;i++){
      Lista=Lista[i+1];
      }
      Tras--;
      return 1;
         }
        }
      }
      int Lista_Get_toda(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Frente];
      return 1;
        }
      }
      int Lista_Get_inicio(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Frente];
      return 1;
        }
      }
      int Lista_Get_Fim(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Tras];
      return 1;
        }
      }
      int Lista_Busca_Valor(int Valor, int *Posicao){
      int i;
      if(Lista_Vazia()){
      return 0;
      }else{
      for(i=Frente;i<Tras;i++){
      if(Lista==Valor){
      break;
        }
      }
      if(i==Tras){
      return 0;
      }else{
      *Posicao=i; 
      return 1;
         }
        }
      }
      int Lista_Busca_Posicao(int *Valor, int Posicao){
      if(Lista_Vazia()){
      return 0;
      }else{
      if(Posicao>Frente && Posicao<Tras){
      *Valor=Lista[Posicao];
      return 1;
      }else{
      return 0;
         }
        }
      }
      int main(){
      int i,Valor,op=0,pos;
      Lista_Construtor();
      while(op!=12){
      printf("*** Menu de opções ***\n");
      printf("1-Inserir início\n");
      printf("2-Inserir fim\n");
      printf("3-Inserir meio\n");
      printf("4-Excluir início\n");
      printf("5-Excluir fim\n");
      printf("6-Excluir meio\n");
      printf("7-Mostrar toda lista\n");
      printf("8-Mostrar primeiro item da lista\n");
      printf("9-Mostrar último item da lista\n");
      printf("10-Mostrar a posição de um item da lista\n");
      printf("11-Mostrar o valor de uma posição\n");
      printf("12-Sair\n");
      printf("Escolha uma opção: ");
      scanf("%d", &op);
      switch(op){
          case 1:
              printf("Digite o valor a ser inserido: ");
              scanf("%d", &Valor);
              Lista_Inserir_Inicio(Valor);
              break;
          case 2:
              printf("Digite o valor a ser inserido: ");
              scanf("%d", &Valor);
              Lista_Inserir_fim(Valor);
              break;
            case 3:
              printf("Digite o valor a ser inserido: ");
              scanf("%d", &Valor);
              printf("Digite a posição que deseja inserir: ");
              scanf("%d", &pos);
              Lista_ Inserir_meio(int Valor, pos); 
              break;
            case 4:
              printf("Digite a remoção do início: ");
              scanf("%d", &*Valor);
              Lista_ Excluir_inicio(*Valor); 
              break;
              case 5:
              printf("Digite a remoção do fim: ");
              scanf("%d", &*Valor);
              Lista_ Excluir_fim(*Valor); 
              break;
              case 6:
              printf("Digite a remoção do meio: ");
              scanf("%d", &Valor);
              printf("Digite a posição que deseja remover: ");
              scanf("%d", &*Posicao);
              Lista_ Excluir_meio(intValor, * pos); 
              break;
               case 7:
              printf("Digite ao a mostrar toda lista: ");
              scanf("%d", &Valor);
              Lista_ mostrar_toda_lista(Valor);
              break;
             case 8:
              printf("Digite ao a mostrar primeiro item da lista: ");
              scanf("%d", &*Valor);
              Lista_ mostrar_primeiro_item_da_lista(*Valor);
              break;
             case 9:
              printf("Digite ao a mostrar último item da lista: ");
              scanf("%d", &*Valor);
              Lista_ mostrar_ultimo_item_da_lista(*Valor);
              break;
              case 10:
              printf("Digite ao a mostrar a posição de um item da lista: ");
              scanf("%d", &Valor);
              printf("Digite a posição que deseja mostrar na lista: ");
              scanf("%d", &* pos);
              Lista_ mostrar_posicao_de_um_item_da_lista(intValor, *pos);
              break;
              case 11:
              printf("Digite ao a mostrar o valor de uma posição: ");
              scanf("%d", &*Valor
              printf("Digite a posição que deseja mostrar no valor: ");
              scanf("%d", &pos);
              Lista_ mostrar_posicao_de_um_valor_da_lista(int*Valor, pos);
              break;
              case 12:
              default:
              printf("Valor Invalido!\n");
              system("PAUSE");
               }
         }
       return 0;
      }
    • Por oromotoceu
      bom dia pode me ajudar nessa questão por favor
      O programa deverá trabalhar dados de um veículo, onde será armazenado, Nome do proprietário, placa do carro, modelo do carro e preço do carro.
      O programa deve ter as seguintes opções:
      Inserir dados (todos os dados sugeridos no enunciado acima).
      Excluir um Carro específico com a busca pela placa.
      Editar dados de um Carro com a busca pela placa.
      Consultar carro por Placa.
      Exibir todos os dados cadastrados.
      Finalizar programa.
      A opção exibir todos os dados, apresenta tudo que já foi cadastrado e está na memória.
       
    • Por TK_T
      olá sou iniciante consegui fazer um o código de um exercício só que quando eu peço o valor 12ab ele lê como numérica alguém pode me ajudar? 
      Exercício: Leia uma string e diga se a mesma é numérica (na base decimal) ou não.
      Ex.: "123" -> numérica
      "abc" -> não numérica
      "12ab" -> não numérica
      "12.34" -> numérica 
      #include <stdio.h> int main() { char Numero; printf("Digite Algo: "); scanf("%c", &Numero); if(Numero == '1' || Numero == '2' || Numero == '3' || Numero == '4' || Numero == '5' || Numero == '6' || Numero == '7' || Numero == '8' || Numero== '9' || Numero == '0') printf("\tNumérica...\n"); else printf("\tNão Numérica\n"); return 0; }  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.