Ir para conteúdo
Fórum Script Brasil
  • 0

Arquivo em C - registro


ruymds

Pergunta

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 para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...