0
I have this little program and I’m able to save, and upload from the file to struct(not perfectly).
The error is as follows: after loading the file to struct, if in the function I load the printf it will correctly print all struct files that were previously in the file, however, if I do the same printf in another function, or even try to save in the file, it puts random values in memory, would like to know where was my mistake.
#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 form in which I call from the archive to struct, thank you!
How will the
CarregarProdutos()
the first time the program runs if the fileprodutos.txt
does not exist ? TheCadastrarProdutos()
also does not guarantee that it does not register more records than were allocated in themalloc
for in thedo while
was not considered thei
as exit point also– Isac