Jump to content
Fórum Script Brasil
  • 0

Arquivo em C - registro


ruymds

Question

Olá pessoal,

alguém poderia me dar uma dica do código abaixo. Quando executo e faço todo o preenchimento do registro e dai o arquivo é gravado com mais de 1,5Gb em txt. O programa trava e o o arquivo txt fica indisponivel pois não é possivel abrir tal arquivo por possuir mais de 1,5Gb.

O que esta de errado no código.

obrigado.

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

void Clientes();

/* definicao do tipo cliente*/
typedef struct {
        int codcli;
        char nome[100];
        int cpf[11];
        char endereco[30];
        int telefone[10];
        int idade[2];
        int codcarro;
}cliente;


// Função de cadastro de clientes
void Clientes()
{
   system("cls");
   printf("--------------------------------------------------------------------------------\n");
   printf("                         Cadastro de Clientes\n");
   printf("--------------------------------------------------------------------------------\n");   
     
  
      cliente *vetclientes; // vetor de clientes
      int num;  // numero de clientes
      char op; // opção de cadastro
      FILE *arq_cliente; // arq. de armazenamento
   do{       
          // abre o arquivo para leitura
          arq_cliente=fopen("Cadastro_Cliente.txt","r+b");
          
          if(arq_cliente==NULL)
          {
             // se arquivo não existe abre para escrita              
             arq_cliente=fopen("Cadastro_Cliente.txt","w+b");
             // inicializa num de clientes com 0
             num=0;
          }else{
                 //se arquivo existe le o num de clientes  
                 fread(&num,sizeof(int),1,arq_cliente);
                 //aloca memória para os clientes 
                 vetclientes = (cliente *)malloc(sizeof(cliente)*num);
                 // e le o vetor de clientes inteiro
                 fread(vetclientes,sizeof(cliente),num,arq_cliente);
          }
          
          if(num==0)
          {
             // se n=0, aloca memoria para vetor
             vetclientes = (cliente *)malloc(sizeof(cliente));
          }else{
                 // caso contrario realoca memoria para vetor
                 vetclientes = (cliente *)realloc(vetclientes,sizeof(cliente)*(num+1));
          }
  
       // cadastra novo cliente 
          printf("\nCliente %d",vetclientes[num].codcli);
          //vetclientes[num].codcli = num;           
          printf("\nNome: "); scanf("%s",vetclientes[num].nome);
          fflush(stdin);
          printf("CPF: "); scanf("%i",vetclientes[num].cpf);
          fflush(stdin);
          printf("Endereco: "); scanf("%s",vetclientes[num].endereco);
          fflush(stdin);
          printf("Telefone: "); scanf("%i",vetclientes[num].telefone);
          fflush(stdin);
          printf("Idade: "); scanf("%i",&vetclientes[num].idade);
          printf("codigo:", &vetclientes[num].codcli);
          printf("\nRegistro gravado com sucesso!\n");
    
      // incrementa numero de clientes
         num++;
       
              // fecha o arquivo
              fclose(arq_cliente);
              
              // e em seguida reabre para posicionar no comeco
              arq_cliente=fopen("Cadastro_Cliente.txt","r+b");
              
              //reescreve o numero de clientes atualizado
              fwrite(&num,sizeof(int),1,arq_cliente);   
              fwrite(vetclientes,sizeof(cliente),num,arq_cliente);   
              
              // e fecha o arquivo
              fclose(arq_cliente);
              
              //libera memoria
              free(vetclientes);
              
      printf("\nDeseja registrar novo Cliente?[S/N]: ");
      scanf("%s",op);
  }while((op!='n') || (op!='N'));
}

Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...