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

Тема в разделе "Общие вопросы по С и С++", создана пользователем AILEKCAHdP, 29 май 2009.

  1. AILEKCAHdP

    AILEKCAHdP Гость

    Используя функции и режим меню, создать файл из 10 структур, просмотреть файл, добавить в файл новую информацию , применяя режим прямого доступа.
    Структура имеет вид: фамилия спортсмена, его номер, количество набранных очков. Поменять местами в файле записи о первых двух спортсменах.
    Все сделал, а как поменять местами в файле записи о первых двух спортсменах понятия не имею. Помогите кто может. Заранее благодарен.
    Код (Text):
    #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);
    }
     
  2. AILEKCAHdP

    AILEKCAHdP Гость

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

Поделиться этой страницей