Тема: Обробка двійкового файлу
Умова:(Фрагмент коду був готовий)
Наступна програма дозволяє відредагувати 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):
---------------------і так декілька раз---------------------------