Я только начал изучать файлы на языке c, и у меня проблема с моим кодом.Он работает просто отлично, записывая в двоичный файл, но когда я пытаюсь прочитать значения обратно, он возвращает на одно меньшее значение, а также различные значения для массива.Я знаю, что, вероятно, я совершил глупую ошибку, если бы вы могли помочь мне понять, я был бы очень благодарен.Это мой код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *f;
if ((f=fopen("fis.bin","wb"))==NULL)
{
printf ("Error\n");
exit(1);
}
int *v;
int n,x;
char s[100];
scanf("%d",&n);
v=(int*)malloc(n*sizeof(int));
for (int i=0; i<n; i++)
{
scanf("%d",&v[i]);
x=fprintf(f,"%d\n",v[i]);
if (x<0)
perror("Error:");
}
fclose(f);
int *cit;
cit=(int*)calloc(n,sizeof(int));
if ((f=fopen("fis.bin","rb"))==NULL)
{
printf ("Error\n");
exit(1);
}
fseek(f,0,SEEK_END);
int sz = ftell(f)/sizeof(v[0]);
fseek(f,0,0);
int i=0;
if(!fread(cit,sizeof(int),sz,f))
perror("err: ");
for (i=0; i<sz; i++)
printf("%d\n",cit[i]);
printf("\n");
free(v);
free(cit);
fclose(f);
}