Нужно сделать вывод данных в бинарном файле
мне нужна помощь. В моей программе сначала вводятся оценки за вступительные экзамены по математике и физике, затем вводится количество сессий и оценки(в баллах) по математике и физике за эти сессии. Не могу правильно считать данные из бинарного файла с помощью 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 шт):
Приведенный ниже код открывает файл 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 не может быть открыт");