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'));
}
Question
ruymds
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.
Link to comment
Share on other sites
0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.