Функция удаления структуры из бинарного файла

Привет всем, кто смотрит эту тему Если не сложно, если интересно, помогите разобраться в программе. Задание такое: Используя функции и режим меню, создать файл из 10 структур, просмотреть файл, добавить в файл новую информацию и, применяя режим прямого доступа, выполнить задание по своему варианту. Структура имеет вид: фамилия спортсмена, его номер, количество набранных очков. Удалить из списка информацию о спортсмене с наименьшим количеством очков.Есть код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
struct sport {char name[10]; int number; int kol;} sp;
void input(FILE *); // создание нового файла 
void print(FILE *); // просмотр файла 
void app(FILE *); // добавление в файл
void del(FILE *); // удаление игрока с наименьшим количеством очков
main()
{ char c;
  FILE *tf;
  while (1)
  { clrscr();
    puts(" 1 – новый файл");
    puts(" 2 – просмотр файла");
    puts(" 3 – добавление в файл");
    puts(" 4 – удаление игрока с наименьшим количеством очков");
    puts(" 0 - выход");
    c=getch();
    switch(c)
    { case '1':input(tf);break;
      case '2':print(tf);break;
      case '3':app(tf);break;
      case '4':del(tf);break;
      case '0':return 0;
      default : puts("неверный режим");
     }
  }
}
void input(FILE *tf)
{ char ch;
  tf=fopen("file1.dat","wb"); // открытие бинарного файла для записи
  clrscr();
  printf("\n Введите информацию о спортсменах \n");
  do
  { printf("\n Фамилия: "); scanf("%s",sp.name);
    printf(" Номер: "); scanf("%d",&sp.number);
    printf(" Количество очков: "); scanf("%d",&sp.kol);
    fwrite(&sp,sizeof(sp),1,tf); // запись в файл одной структуры sp
    printf("\n Закончить?  y/n  ");
    ch=getch();
  }
  while (ch != 'y');
  fclose(tf);
}
void print(FILE *tf)
{ int i;
  clrscr();
  tf=fopen("file1.dat","rb"); // открытие бинарного файла для чтения
  i=1;
  fread(&sp,sizeof(sp),1,tf); // чтение из файла одной структуры sp
  while (!feof(tf))
  { printf("\n  %3d спортсмен %-10s номер %d   очков %d",i,sp.name,sp.number,sp.kol);
    fread(&sp,sizeof(sp),1,tf);
    i++;
  }
  getch();
}
void app(FILE *tf)
{ char ch;
  tf=fopen("file1.dat","ab"); // открытие бинарного файла для добавления
  clrscr();
  printf("\n  Введите информацию о спортсменах \n");
  do
  { printf("\n Фамилия: "); scanf("%s",sp.name);
    printf(" Номер: "); scanf("%d",&sp.number);
    printf(" Количество очков: "); scanf("%d",&sp.kol);
    fwrite(&sp,sizeof(sp),1,tf);
    printf("Закончить?  y/n  ");
    ch=getch();
  }
  while (ch != 'y');
  fclose(tf);
}
void del(FILE *tf)
 {char ch;
  int i,j,n,h;
  sport *s,p;
  clrscr();
  tf=fopen("file1.dat","rb"); // открытие бинарного файла для чтения
  // подсчет числа записей в файле
  n=0;
  fseek( tf, 0, 2 );
  n = ftell(tf) / sizeof(sport);
  rewind(tf);
  s=(sport *)malloc(n*sizeof(sp));
  // заполнение массива
  for (i=0,h=1;i<n;++i)
  {fread(&sp,sizeof(sp),1,tf);
  s[i]=sp;
  printf("\n %3d спортсмен %-10s номер %d   очков %d",h,sp.name,sp.number,sp.kol);
  h++;
  }
  fclose(tf);
  tf=fopen("file1.dat","wb"); // открытие бинарного файла для записи
  j=1;
  while (j)
  {
    j=0;
    for (i=0;i<n-1;i++)
    {
      if (s[i].kol<s[i+1].kol)
      {
        p=s[i];
        s[i]=s[i+1];
        s[i+1]=p;
        j=1;
      }
    }
  }
  for(i=0;i<n-1;++i)
    fwrite(&s[i],sizeof(sp),1,tf);
  printf("\n\n   Спортсмен с наименьшим количеством очков: %5s (%d) удален. ",s[n-1].name,s[n-1].kol);
  getch();
  free(s); // Освобождение выделенной по адресу s памяти
  fclose(tf);
}
Меня интересует функция del (удаление). Нужны комментарии к ней. Интересно, как можно удалять сразу не одну структуру, а всех игроков с одинаковым наименьшим количеством очков?Спасибо.
2 ответа

Спасибо, уже не нужно)


А как сделать чтоб можно было удалять сразу не одну структуру, а всех игроков с одинаковым наименьшим количеством очков?