I'm making a method for a code in C that adds an addition to the value of all books written to a binary file, however ... when I have more than 2 records, all on, ie the record 3,4 , 5 ... are rewritten with registry values 2 can someone help me? {
FILE *fptr;
float acrescimo;
struct reg_livro livro;
int contadorLivros = 0;
if((fptr = fopen("livros.dat","rb+"))==NULL){
printf("Erro ao abrir o arquivo \n");
return;
}
fseek(fptr,0,2);
int tamanhoArq = ftell(fptr);
int qtdLivros = tamanhoArq/sizeof(livro);
printf("Quantidade de livros %d\n", qtdLivros);
printf("Tamanho do arquivo %d\n",tamanhoArq );
rewind(fptr);
printf("Posicao atual %d\n",ftell(fptr) );
printf("Informe a porcentagem de acrescimo no preco de cada livro\n");
fflush(stdin);scanf("%f",&acrescimo);
while(contadorLivros<qtdLivros)
{
fread(&livro,sizeof(livro),1,fptr);
printf("\n Ponteiro Inicial %d",ftell(fptr));
float valorAcrescimo = livro.preco*(acrescimo/100);
printf("\n Acrescimo: %f\n", valorAcrescimo);
printf("\n Livro antes da alteracao: %f ",livro.preco);
livro.preco = livro.preco + valorAcrescimo;
printf("\n Livro depois da alteracao: %f ",livro.preco);
fseek(fptr,-sizeof(livro),1);
fwrite(&livro,sizeof(livro),1,fptr);
printf("\n Ponteiro Final %d",ftell(fptr));
contadorLivros++;
}
fclose(fptr);
printf("\n Acrescimo inserido com sucesso!!\n");