Поменять местами в файле записи

  • Автор темы AILEKCAHdP
  • Дата начала
A

AILEKCAHdP

Гость
#1
Используя функции и режим меню, создать файл из 10 структур, просмотреть файл, добавить в файл новую информацию , применяя режим прямого доступа.
Структура имеет вид: фамилия спортсмена, его номер, количество набранных очков. Поменять местами в файле записи о первых двух спортсменах.
Все сделал, а как поменять местами в файле записи о первых двух спортсменах понятия не имею. Помогите кто может. Заранее благодарен.
Код:
#include<stdio.h>
#include<conio.h>
#include<string.h>

struct sport{char name[10];int number;int kol;}sp;
void input(FILE *);
void print(FILE *);
void app(FILE *);
void find(FILE *);
main()
{ char c;
FILE *tf;
while (1)
{
puts("1-novuy fail");
puts("2-prosmotr faila");
puts("3-dobavlenie v fail");
puts("4-poisk i izmenenie");
puts("0-vyhod");
c=getch();
switch(c)
{case '1':input(tf); break;
case '2':input(tf);break;
case '3':input(tf);break;
case '4':input(tf);break;
case '0':input(tf);break;
default : puts("nevernuy regim");
}
}
}
void input(FILE *tf)
{char ch;
tf=fopen("FILE1.dat","wb");
printf("\n vvedite informaciu o sportcmene \n");
do
{ printf("\n familiya: "); scanf("%s",sp.name);
printf(" nomer: "); scanf("%d",&sp.number);
printf(" kolichestvo ochkov: "); scanf("%d",&sp.kol);
fwrite(&sp,sizeof(sp),1,tf);
printf("\n Zakonchity ? y/n");
ch=getch();
}
while (ch != 'y');
fclose(tf);
}
void print(FILE*tf)
{ int i; 
tf=fopen("file.dat","rb");
i=1;
fread(&sp,sizeof(sp),1,tf);
while(!feof(tf))
{printf("\n %3d familiya %10s number %6d kolichestvo ochkov %4d ",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");
printf("\n vvedite informaciu o sportcmene \n");
do
{ printf("\n familiya: "); scanf("%s",sp.name);
printf(" nomer: "); scanf("%d",&sp.number);
printf(" kolichestvo ochkov: "); scanf("%d",&sp.kol);
fwrite(&sp,sizeof(sp),1,tf);
printf("\n Zakonchity ? y/n");
ch=getch();
}
while (ch != 'y');
fclose(tf);
}
void FIND(FILE*tf)
{char c, sport[10];
long int i;
tf=fopen("file1.dat","rb+");
puts(" Familiya sportcmena: ");
gets(sport);
fread(&sp,sizeof(sp),1,tf);
while (!feof(tf))
{if (strcmp(sp.name,sport)==0)
{printf(" familya %10s number %6.2d kolichestvo ochkov %d",sp.name,sp.number,sp.kol);
printf("/n Izmenity ? y/n");
c=getch();
if (c=='y')
{printf("\n kolichestvo: "); scanf("%d",&sp.kol);
printf("\n number: "); scanf("%d",&sp.number);
i=sizeof(sp);
fseek(tf,-i,1);
fwrite(&sp,sizeof(sp),1,tf);
}
}
fread(&sp,sizeof(sp),1,tf);
}
fclose(tf);
}
 
A

AILEKCAHdP

Гость
#2
:)
Подскажите как поменять местами в файле записи первых двух спортсменов.
Я думаю,что сначало надо
считывать 1-го спортсмена. Считывать 2-го. Возвращать указатель к первому (fseek). Писать данные о втором. Писать данные о первом (т.к. указатель уже сместился ко второму). А как это написать незнаю. Помогите.