Ir ao conteúdo

Posts recomendados

Postado

Olá! Sou novo aqui e estou com um sério problema em meu código.

Bom vamos ao problema.

O caso é que preciso trabalhar com arquivos e salvar os dados gerados com base em struct em um arquivo binário e quando abrir o programa novamente carregar os arquivos no vetor.

O caso é que não esta ocorrendo assim. Fiz diversos teste e me parece que meu sizeof() não esta funcionando.

Se alguém pude me ajudar agradeço muito, segue o código:

 

Código:

  Mostrar conteúdo oculto

 

  • Curtir 1
Postado

Esse código acima está com vários problemas, sugiro trocar pelo que está no seu arquivo, caso ele seja igual segue o problema ao salvar:

          

fwrite(&vendedores, sizeof(vendedores), 1, arq);

 

//deveria ser

fwrite(vendedores[i], sizeof(T_ficha_vendedores), 1, arq);

 

  • Curtir 1
  • Obrigado 1
Postado
  Em 23/11/2017 às 22:06, TYSQUARE89 disse:

Esse código acima está com vários problemas, sugiro trocar pelo que está no seu arquivo, caso ele seja igual segue o problema ao salvar:

          

fwrite(&vendedores, sizeof(vendedores), 1, arq);

 

//deveria ser

fwrite(vendedores[i], sizeof(T_ficha_vendedores), 1, arq);
Expandir  

Ele da um erro se fizer assim :(

  • Curtir 1
Postado
  Em 23/11/2017 às 22:45, TYSQUARE89 disse:

Perdão, use: 

fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);

Faça o mesmo com clientes e produtos.

Expandir  

 Fiz assim

 

void SalvarArqClientes(T_ficha_cliente clientes[], int sizeVet){
	int i;
	FILE * arq;
	T_ficha_cliente p;
	arq = fopen("clientes.bin", "w");

	if(arq != NULL){
		for (i = 0; i < sizeVet; i++){
			p = clientes[i];
			fwrite(&p, sizeof(T_ficha_cliente), 1, arq);
		}
		fclose(arq);
	}else{
		printf("Erro ao salvar o arquivo\n");
		system("pause");
		exit(1);
	}
}
void SalvarArqProdutos(T_ficha_produtos produtos[], int sizeVet){
	int i;
	T_ficha_produtos p;
	FILE * arq;

	arq = fopen("produtos.bin", "w");

	if(arq != NULL){
		for (i = 0; i < sizeVet; i++)		{
			p = produtos[i];
			fwrite(&p, sizeof(produtos), 1, arq);
		}
		fclose(arq);
	}else{
		printf("Erro ao abrir o arquivo\n");
		exit(1);
	}
}
void SalvarArqVendedores(T_ficha_vendedores vendedores[], int sizeVet){
	int i;
	T_ficha_vendedores p;
	FILE * arq;

	arq = fopen("vendedores.bin", "w");

	if(arq != NULL){
		for (i = 0; i < sizeVet; i++){
			p = vendedores[i];
			fwrite(&p, sizeof(vendedores), 1, arq);
		}
		fclose(arq);

	}else{
		printf("Erro ao abrir o arquivo\n");
		exit(1);
	}
}

 

Mas como faço com a leitura??

 

int lerVendedor(T_ficha_vendedores arr[]){
		FILE * arq = fopen("vendedores.bin", "rb");

	if(arq != NULL){
		int indice = 0;
		while(1){
			T_ficha_vendedores p;

			size_t r = fread(&p, sizeof(T_ficha_vendedores), 1, arq);

			// se retorno for menor que o count, então sai do loop
			if(r < 1)
				break;
			else
				arr[indice++] = p;
		}
		fclose(arq); // fecha o arquivo
		return indice;
	}
	else
	{
		printf("\nErro ao abrir o arquivo para leitura!\n");
		system("pause");
		exit(1);
	}
}
int lerProdutos(T_ficha_produtos arr[]){
		FILE * arq = fopen("produtos.bin", "rb");


	if(arq != NULL){
		int indice = 0;
		while(1){
			T_ficha_produtos p;

			size_t r = fread(&p, sizeof(T_ficha_produtos), 1, arq);

			// se retorno for menor que o count, então sai do loop
			if(r < 1)
				break;
			else
				arr[indice++] = p;
		}
		fclose(arq); // fecha o arquivo
		return indice;
	}
	else
	{
		printf("\nErro ao abrir o arquivo para leitura!\n");
		system("pause");
		exit(1);
	}
}
int lerClientes(T_ficha_cliente arr[]){
	FILE * arq = fopen("clientes.bin", "rb");

			char str[999];

if (arq) {
    while (fscanf(arq, "%s", str)!=EOF)
        printf("%s",str);
    system("pause");
    fclose(arq);
}
		system("pause");

	if(arq != NULL){
		int indice = 0;
		while(1){
			T_ficha_cliente p;
			size_t r = fread(&p, sizeof(T_ficha_cliente), 1, arq);

			// se retorno for menor que o count, então sai do loop
			if(r < 1)
				break;
			else
				arr[indice++] = p;
		}
		fclose(arq);
		return indice;
	}
	else
	{
		printf("\nErro ao abrir o arquivo para leitura!\n");
		system("pause");
		exit(1);
	}
}

Não consegui inserir como C os códigos desculpe

  • Curtir 1
Postado

@Junior Anzolin A leitura continua igual, eu testei aqui e ele salvou e carregou normalmente.

Usar printf não adianta, pois é um arquivo binário.


fwrite(&clientes[i], sizeof(T_ficha_cliente), 1, arq);
fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);
fwrite(&produtos[i], sizeof(T_ficha_produtos), 1, arq);

 

  • Curtir 1
  • Obrigado 1
Postado
  Em 23/11/2017 às 23:30, TYSQUARE89 disse:

@Junior Anzolin A leitura continua igual, eu testei aqui e ele salvou e carregou normalmente.

Usar printf não adianta, pois é um arquivo binário.


fwrite(&clientes[i], sizeof(T_ficha_cliente), 1, arq);
fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);
fwrite(&produtos[i], sizeof(T_ficha_produtos), 1, arq);

 

Expandir  

Que compilador esta usando? pois pelo dev c++ nao esta fazendo certo

 

adicionado 2 minutos depois
  Em 23/11/2017 às 23:30, TYSQUARE89 disse:

@Junior Anzolin A leitura continua igual, eu testei aqui e ele salvou e carregou normalmente.

Usar printf não adianta, pois é um arquivo binário.


fwrite(&clientes[i], sizeof(T_ficha_cliente), 1, arq);
fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);
fwrite(&produtos[i], sizeof(T_ficha_produtos), 1, arq);

 

Expandir  

E não sei se isso interfere mas estou usando outro tipo alem de char mas não funcionou as minhas structs esta assim

	typedef struct ficha_vendedores{
		int viCodigo;
		char vcNome[30];
		char vcEndereco[50];
		char vcFone[20];
		int ativo;
	}T_ficha_vendedores;
	typedef struct ficha_produtos{
		int viCodigo;
		int viUniEstoque;
		char vcDescricao[50];
		char vcFornecedor[30];
		char vcDataComp[20];
		float vfPreco;
		int ativo;
	}T_ficha_produtos;
	typedef struct ficha_cliente{
		int viCodigo;
		char vcNome[30];
		char vcEndereco[50];
		char vcFone[20];
		int vbCredito;
		int ativo;
	}T_ficha_cliente;

 

adicionado 40 minutos depois
  Em 23/11/2017 às 23:30, TYSQUARE89 disse:

@Junior Anzolin A leitura continua igual, eu testei aqui e ele salvou e carregou normalmente.

Usar printf não adianta, pois é um arquivo binário.


fwrite(&clientes[i], sizeof(T_ficha_cliente), 1, arq);
fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);
fwrite(&produtos[i], sizeof(T_ficha_produtos), 1, arq);

 

Expandir  

Se não for incomodo poderia testar com todo o scrypt?

 

Código:

  Mostrar conteúdo oculto

 

  • Curtir 1
Postado

Eu tentei e tentei com esse teu código mas esse fgets me ferrou, então tive que fazer uma função para limpar o buffer e ler a string, segue o código:

  Mostrar conteúdo oculto

 

  • Curtir 1
  • Amei 1
Postado
  Em 24/11/2017 às 02:01, TYSQUARE89 disse:

Eu tentei e tentei com esse teu código mas esse fgets me ferrou, então tive que fazer uma função para limpar o buffer e ler a string, segue o código:

  Mostrar conteúdo oculto

Valeu cara funcionou :) me salvou mas agora não estou conseguindo fazer funcionar a pesquisa

Expandir  

 

void ProcurarClientes(T_ficha_cliente arr[]){
    char pesquisa[50];
    int i;
    printf("Informe o Nome que procura:");
    fflush(stdin);
    lerString(pesquisa, 50);
    for(i=0; i< 100; i++){
        if(strcmp(pesquisa, arr[i].vcNome) == 0){
        	if(arr[i].ativo==1){
	            printf("<---------------------------------------->\n");
	            DetalhesCliente(arr, i+1);
	            printf("<---------------------------------------->\n");
	        }
        }
    }
    system("pause");
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!