Тема: обмін даними в файлах
Ось повне завдання:
Запишіть в файл nf чисел типу float, прочитайте число з позицій nf-3. Після цього допишіть в файл ncданних типу char, прочитайте цей з nc / 4 позиції. Допишите в файл ni чисел типу int. Прочитайте число з позиції ni-3. Для перевірки лічені дані вивести на екран. Роздрукуйте вміст файлу - всі введені дані повинні бути присутніми в файлі. У процесі введення-виведення даних використовуйте функції роботи з файлом fopen, fseek, ftell, rewind, fgetpos, fsetpos, fclose.
Ось код:
#include<stdio.h>
#include<conio.h>
void main() {
  int nf, nc, ni;
  int mf[20], fn;
  char mc[20], cn;
  float mi[20], in;
  FILE *fp;
  fp = fopen("files.txt", "w+");
  if (fp == NULL) {
    printf("file can not be opened: error \n");
    return;
  }
  fflush(stdin);
  rewind(fp);
  printf("\tinput: nf - number of float :\nnf= ");
  scanf("%f", &nf);
  printf("Enter float data\n");
  for (int i=0; i < nf; i++) {
    mf[i] = getche();
  }
  puts(" ");
  for (int i=0; i < nf; i++) {
    printf("%f ", mf[i]);
    fprintf(fp, "%f", mf[i]);
  }
  fseek(fp, (nf-3), SEEK_SET);
  fscanf(fp, "%f", &fn);
  printf("\nRead off float: %f\n", fn);
  rewind(fp);
  fseek(fp, nf, SEEK_SET);
  printf("\tinput: nc - number of char:\nnc= ");
  scanf("%c", &nc);
 
  printf("Enter char data\n");
  for (int i=0; i < nc; i++) {
    scanf("%c", &mc[i]);
  }
  for (int i=0; i < nc; i++) {
    printf("%c ", mc[i]);
    fprintf(fp, "%c ", mc[i]);
  }
  if ((nc %4)) { fseek(fp, nf*3 * (nc / 4), SEEK_SET); }
   else fseek(fp, nf*3 * (nc / 4) - 1, SEEK_SET);
  fscanf(fp, "%c", &cn);
  printf("\nRead off char: %c\n", cn);
  rewind(fp);
  p:printf("\tinput: ni - number of int :\n!!!ni>3!!!\nni= ");
  scanf("%d", &ni);
  if (ni <= 3) { printf("\nError.Try again\n"); goto p; }
 
  printf("Enter int data\n");
  for (int i = 0; i < ni; i++) {
    scanf("%d", &mi[i]);
  }
  rewind(fp);
  fseek(fp, 3+ nc + nf, SEEK_SET);
  for (int i = 0; i < ni; i++) {
    printf("%d ", mi[i]);
    fprintf(fp, "%d", mi[i]);
  }
  fseek(fp, 8 * (ni -4) + nf + 3 + nc, SEEK_SET);
  fscanf(fp, "%d", &in);
  printf("\nRead off int: %d\n", in);
  printf("All read off elements: %df, %c, %d", fn, cn, in);
  fclose(fp);
  _getch();
}не можу зрозуміти де помилки, але виводить не зовсім те що треба
Допоможіть, будь ласка,  їх знайти і підкажіть як їх виправити