Тема: Обробка двійкового файлу
Умова:(Фрагмент коду був готовий)
Наступна програма дозволяє відредагувати k-й за порядком запис в базі — ввести інші оцінки.(Те що я повинен зробити)Вдосконалити наведену в даному розділі програму обробки списку студентів так, щоб вона коректно обробляла можливі помилки. Вдосконалити програму так, щоб вона дозволяла додавати до списку нових студентів.
#include "pch.h"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define FNAME_LEN 80
#define SURNAME_LEN 20
typedef struct teg_student
{
    char surname[SURNAME_LEN];
    int prog_theor;
    int prog_lab;
}tstudent;
int main()
{
    char  fileName[FNAME_LEN];
    FILE *f;
    tstudent s;
    int k, r, x;
    printf("File of database?\n");
    gets_s(fileName);
    f = fopen(fileName, "r+");
    if (f == NULL)
    {
        fprintf(stderr, "Cannot be opened" );
        fclose(f);
        return  -1;
    }
    while (1) 
    {
        printf("Record number (-1 exit):\n ");
        scanf("%i", &k);
        if (k == -1)
        {
            break;
        }
        r = fseek(f, (long)k * sizeof(tstudent), SEEK_SET);
        fread(&s, sizeof(tstudent), 1, f);
        printf("Old record in the database\n");
        printf("%c %i %i", s.surname, s.prog_theor, s.prog_lab);
        printf("\nEnter the corrected marks: ");
        scanf("%i %i",&(s.prog_theor), &(s.prog_lab));
        fseek(f, (long)k * sizeof(tstudent), SEEK_SET);
        fwrite(&s, sizeof(tstudent), 1, f);
        printf("Add new record? 0 - yes, 1 - no\n");
        scanf("%i", &x);
        if (x == 0)
        {
            fseek(f, 0L, SEEK_END);
            printf("\nSurname: prog_theor: prog_lab:\n");
            scanf("%c %i %i", &(s.surname), &(s.prog_theor), &(s.prog_lab));
            fwrite(&s, sizeof(tstudent), 1, f);
        }
    }
    fclose(f);
    return 0;
}Після додавання одного запису зразу зациклюється вивід одних і тих самих рядків. Старий запис бази виводиться непогано крім прізвища(вивело просто "х"), але я не впевнений чи воно взагалі є в двійковому файлі, бо на його орієнтовному місці пробіли.
Результат:
File of database?
in.dat
Record number (-1 exit):
 1
Old record in the database
x 8 5
Enter the corrected marks: 4 5
Add new record? 0 - yes, 1 - no
0
Surname: prog_theor: prog_lab:
wrarr 6 7
Record number (-1 exit):
 Old record in the database
x 4 5
Enter the corrected marks: Add new record? 0 - yes, 1 - no
Surname: prog_theor: prog_lab:
Record number (-1 exit):
 Old record in the database
x 4 5
Enter the corrected marks: Add new record? 0 - yes, 1 - no
Surname: prog_theor: prog_lab:
Record number (-1 exit):
---------------------і так декілька раз---------------------------