Поменять местами в файле записи о первых двух спортсменах - C (СИ)
Формулировка задачи:
Запись имеет вид: фамилия спортсмена, его номер, количество набранных очков. Используя функции и режим меню, создать двоичный файл из 10 записей, просмотреть файл, добавить в файл новую информацию и, применяя режим прямого доступа, поменять местами в файле записи о первых двух спортсменах(При обмене используйте промежуточную переменную типа структура).
Решение задачи: «Поменять местами в файле записи о первых двух спортсменах»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> FILE *f; struct Person { char Name[50]; // Имя int N; // номер int P; // к-во очков }; // Создать базу int CreateBase(char *Fname) { if (f=fopen(Fname,"wb+")) return 0; else printf("Error by create file"); return 1; } // Переставить в базе записи n1 и n2 void SwapPerson(int n1, int n2) { struct Person C1; struct Person C2; int i; long Fsize,Fpos,Pos1,Pos2; fseek(f,0,SEEK_END); Fsize=ftell(f); fseek(f,0,SEEK_SET); Pos1=sizeof(struct Person)*(n1-1); Pos2=sizeof(struct Person)*(n2-1); for (i=0; i<50; i++) {C1.Name[i]=0; C2.Name[i]=0; }; fseek(f,Pos1,SEEK_SET); fread(&C1,sizeof(struct Person),1,f); fseek(f,Pos2,SEEK_SET); fread(&C2,sizeof(struct Person),1,f); fseek(f,Pos1,SEEK_SET); fwrite(C2.Name,1,sizeof(struct Person),f); fseek(f,Pos2,SEEK_SET); fwrite(C1.Name,1,sizeof(struct Person),f); } // Печать базы void PrintBase() { struct Person C; int i; long Fsize,Fpos; fseek(f,0,SEEK_END); Fsize=ftell(f); fseek(f,0,SEEK_SET); while (1) { for (i=0; i<50; i++) C.Name[i]=0; fread(&C,sizeof(struct Person),1,f); printf("%s %d %d\n",C.Name,C.N,C.P); Fpos=ftell(f); if (Fpos >= Fsize) break; } } // Главная int main(int argc, char *argv[]) { struct Person X; int i,k,j; k=CreateBase("base.txt"); if (k==0) { for (j=1; j<=3; j++) { printf("%d ",j); for (i=0; i<50; i++) X.Name[i]=0; printf("Name= "); scanf("%s",X.Name); X.N=j; printf("Count= "); scanf("%d",&X.P); fwrite(X.Name,1,sizeof(X),f); } printf("Initial base:\n\n"); PrintBase(); SwapPerson(1,3); printf("Base after swaping:\n\n"); PrintBase(); fclose(f); } system("PAUSE"); return 0; }
Объяснение кода листинга программы
- Создание файла с базой данных
- Ввод данных о трех спортсменах
- Печать базы данных до перестановки
- Перестановка записей о спортсменах под номерами 1 и 3
- Печать базы данных после перестановки
- Закрытие файла базы данных
- Завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д