I have this little program and I am able to save, and load from the file to struct (not perfectly).
The error is as follows: after loading the file to struct, if in the function load by printf it will correctly print all the files of the struct that were previously in the file, however if I do the same printf in another function , or even trying to save in the file, it puts random values in memory, I wonder where my error was.
#include <stdio.h>
#include <stdlib.h>
struct produto{
char nome[40];
int cod_prod;
float precoVenda;
};
const CRESCE = 64;
int nroProdutos, capacidadeProds;
struct produto *produto;
int novos_prods;
void CarregarProdutos(){
FILE *arq = fopen("produtos.txt","r+");
fscanf(arq,"%d", &nroProdutos);
capacidadeProds =nroProdutos+CRESCE;
produto = malloc(capacidadeProds*sizeof(struct produto));
int i;
for (i = 0; i < nroProdutos; i++){
fscanf(arq,"%s", produto[i].nome );
fscanf(arq,"%d", &(produto[i]).cod_prod );
fscanf(arq,"%f", &produto[i].precoVenda);
// se eu aplicar o printf aqui dará tudo certo..
}
fclose(arq);
}
void SalvarProdutos(){
FILE *arq = fopen("produtos.txt","w");
int i;
fprintf(arq,"%d\n",novos_prods);
for (i = 0; i < novos_prods; i++){
fprintf(arq,"%s\n", produto[i].nome );
fprintf(arq,"%d\n", produto[i].cod_prod );
fprintf(arq,"%f\n", produto[i].precoVenda);
//quando vou salvar pros arquivos os valores saem aleatorios.
//(sei que o erro está na forma que eu leio do arquivo pra memoria)
}
fclose(arq);
}
void CadastrarProdutos(){//essa função cadrastra produtos novos a partir
dos produtos ja existentes, para que não haja sobreposição;
capacidadeProds =nroProdutos+CRESCE;
produto = malloc(capacidadeProds*sizeof(struct produto));
int i = nroProdutos;// essa variavel é a variavel q nao sobrepoe o estoque caso seja diferente de 0
char x;
do
{
printf("Digite o nome do produto\n");
fflush(stdin);
scanf("%s", produto[i].nome);
produto[i].cod_prod = i;
printf("Digite o preco de compra do produto\n");
fflush(stdin);
scanf("%f", &produto[i].precoVenda);
printf("deseja cadastrar um novo produto?\n");
printf("digite n para sair\n");
printf("digite qualquer tecla para cadastrar novos produtos\n");
fflush(stdin);
scanf("%c",&x);
i++;
} while(x != 'n');
novos_prods = i;
// chame aqui a proxima funçao, no caso a função menu
//nesse caso ela esta chamando a função salvar pq aqui esta sem o menu e etc.
SalvarProdutos();
}
int main()
{
CarregarProdutos();
CadastrarProdutos();
}
The error is probably in the form that is loaded from the file to memory. I would appreciate anyone who would help, probably in the way I call the file to struct, thank you!