Нужно сделать вывод данных в бинарном файле

мне нужна помощь. В моей программе сначала вводятся оценки за вступительные экзамены по математике и физике, затем вводится количество сессий и оценки(в баллах) по математике и физике за эти сессии. Не могу правильно считать данные из бинарного файла с помощью fread, помогите, пожалуйста.

#include <iostream>
#include <stdio.h>
#include <windows.h>
 
using namespace std;
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    FILE *f;
    int dt; // кол-во сессий
    int a,b; // баллы за предметы по сессиям
    f = fopen("University1", "wb");
    int c,d; //оценки за вступительные экзамены
    cout << "Введите оценки, полученные студентом на вступительных экзаменах: " << endl;
    cout << "Математкиа: ";
    cin >> c;
    cout << "Физика: ";
    cin >> d;
    fwrite(&c,sizeof(c),1,f);
    fwrite(&d,sizeof(d),1,f);
    cout << "Введите кол-во сессий" << endl;
    cin >> dt;
    for(int i = 0; i < dt; i++)
        {
            
            cout << "Введите оценки (в баллах) за " << i+1 <<"-ю сессию по математике и физике:"  << endl; 
            cin >> a;
            cin >> b;
        }
    fclose(f);
    
    
    f = fopen("University","rb");
    if (f!=NULL)    //файл успешно открыт
    {
            //здесь считывание
        
        fclose(f);  
                
    }
    else
        printf("\nФайл University1 не может быть открыт");
 
   return 0;
}

Ответы (1 шт):

Автор решения: Vanya

Приведенный ниже код открывает файл University сначала для записи и записывает туда оценки за вступительные экзамены. После ввода кол-ва сессий записывает в бинарный файл оценки за сессию. Потом закрывает этот файл, открывая его уже для чтения. И считывает оценки за вступительные экзамены, а далее пока не дойдет до конца файла считывает оценки сессию, параллельно подсчитывая их количество.

FILE* f;
    int dt; // кол-во сессий
    int a, b; // баллы за предметы по сессиям
    int c, d; //оценки за вступительные экзамены
    cout << "Введите оценки, полученные студентом на вступительных экзаменах: " << endl;
    cout << "Математкиа: ";
    cin >> c;
    cout << "Физика: ";
    cin >> d;
    //Открываем файл University для записи в бинарном формате
    f = fopen("University", "wb");
    fwrite(&c, sizeof(c), 1, f);
    fwrite(&d, sizeof(d), 1, f);
    cout << "Введите кол-во сессий" << endl;
    cin >> dt;
    for (int i = 0; i < dt; i++)
    {
        cout << "Введите оценки (в баллах) за " << i + 1 << "-ю сессию по математике и физике:" << endl;
        cin >> a;
        cin >> b;
        //Записываем оценки за (i + 1) сессию в файл
        fwrite(&a, sizeof(a), 1, f);
        fwrite(&b, sizeof(b), 1, f);
    }
    fclose(f);

    //Открываем файл для чтения
    int ra, rb, rc, rd;
    //Открываем тот же файл для чтения в бинарном формате
    f = fopen("University", "rb");
    if (f != NULL)    //файл успешно открыт
    {
        //здесь считывание
        //Считаем сначала оценки по вступительным экзаменам
        fread(&c, sizeof(c), 1, f);
        fread(&d, sizeof(d), 1, f);
        cout << "Оценки за вступительные экзамены: Математика - " << c << "   Физика - " << d << endl;
        int rdt = 0;
        cout << "Оценки за сессии: " << endl;
        while (fread(&a, sizeof(a), 1, f)) {
            fread(&b, sizeof(b), 1, f);
            ++rdt;
            cout << "Сессия " << rdt << ": Математика - " << a << "   Физика - " << b << endl;
        }

        fclose(f);

    }
    else
        printf("\nФайл University не может быть открыт");
→ Ссылка