Проблемы чтения и записи класса в бинарном файле
Ошибка происходит в функциях read и SortByAlphaBet На строках 31 , 78 только после того как я дописываю данные в файл функцией WriteToEnd
#include <iostream>
#include <string>
#include <fstream>
#include <set>
#include <vector>
using namespace std;
class info{
public:
string PIB;
int dd;
int mm;
int yy;
char gender;
void print() {
cout << "ПІБ - " << PIB << endl;
cout << "Число народження - " << dd << endl;
cout << "Місяць народження - " << mm << endl;
cout << "Рік народження - " << yy << endl;
cout << "Пол - " << gender << endl;
}
void enter() {
cin >> PIB >> dd >> mm >> yy >> gender;
}
};
void read() {
ifstream ifstr;
info infobase;
ifstr.open("file.bin",ifstream::binary);
while (ifstr.read((char*)&infobase, sizeof(info))) {
infobase.print();
}
ifstr.close();
system("pause");
}
void write() {
ofstream ofstr("file.bin",ofstream::binary);
info infobase;
int a = 1;
while (a) {
cout << "0.Вихід\n";
cout << "1.Ввести нові данні\n";
cin >> a;
if (a == 1) {
cout << "Введіть піб>>число народження>> місяць народження >> рік народження >> пол (Ч або Ж)\n";
infobase.enter();
ofstr.write((char*)&infobase, sizeof(info));
}
}
ofstr.close();
system("pause");
}
void WriteToEnd() {
ofstream ofstr("file.bin", ofstream::app , ofstream::binary);
info infobase;
int a = 1;
while (a) {
cout << "0.Вихід\n";
cout << "1.Додати данні в кінець файлу\n";
cin >> a;
if (a == 1) {
cout << "Введіть піб>>число народження>> місяць народження >> рік народження >> пол (Ч або Ж)\n";
infobase.enter();
ofstr.write((char*)&infobase, sizeof(info));
}
}
ofstr.close();
system("pause");
}
void SortByAlphabet() {
ifstream ifstr("file.bin", ifstream::binary);
info infobase[100];
for (int i = 0 ;ifstr.read((char*)&infobase[i], sizeof(info));i++) {
infobase[i].print();
}
ifstr.close();
}
int main()
{
system("chcp 1251");
system("cls");
int a,b = 1,c = 0;
const int size = 100;
do{
cout << "Виберіть номер дії\n";
cout << "1. завантажити всі дані з файлу на екран\n";
cout << "2. ввести нові дані в файл\n";
cout << "3. додати даних в кінець файлу\n";
cout << "4. сортування бази даних за алфавітом (за прізвищем)\n";
cout << "5. сортування бази даних за віком\n";
cout << "6. виведення: список людей, що народилися в заданому місяці\n";
cout << "7. виведення: прізвище самого старшого чоловіка\n";
cout << "8. виведення: всі прізвища, що починаються із заданою літери\n";
cout << "0. вихід з програми\n";
cin >> a;
system("cls");
switch (a) {
case 1:
read();
break;
case 2:
write();
break;
case 3:
WriteToEnd();
break;
case 4:
SortByAlphabet();
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 0:
b = 0;
break;
default:
cout << "Помилка\n";
system("pause");
break;
}
} while (b == 1);
}