Почему выбрасывает с консоли на C++
После такого как я выбираю один из пунктов меню, мне приходит результат и сразу такая ошибка C:\Users\37533\source\repos\laba8-yes\x64\Debug\laba8-yes.exe (процесс 58840) завершил работу с кодом -1073741819. Как я могу это решить, чтобы после выбора программа дальше работала
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct Participant {
string name;
int birthYear;
string country;
string instrument;
int place;
// Конструктор по умолчанию
Participant()
: name(""), birthYear(0), country(""), instrument(""), place(0) {}
// Конструктор
Participant(string n, int year, string c, string inst, int p)
: name(n), birthYear(year), country(c), instrument(inst), place(p) {}
};
// Функция для создания нового файла
void createFile() {
ofstream file("contest_data.bin", ios::binary);
file.close();
cout << "Файл создан." << endl;
}
// Функция для добавления записи в файл
void addEntry() {
ofstream file("contest_data.bin", ios::binary | ios::app);
string name, country, instrument;
int birthYear, place;
cout << "Введите Ф.И.О. участника: ";
cin.ignore();
getline(cin, name);
cout << "Введите год рождения: ";
cin >> birthYear;
cout << "Введите название страны: ";
cin.ignore();
getline(cin, country);
cout << "Введите музыкальный инструмент: ";
getline(cin, instrument);
cout << "Введите место на конкурсе: ";
cin >> place;
Participant participant(name, birthYear, country, instrument, place);
file.write((char*)&participant, sizeof(Participant));
file.close();
cout << "Запись добавлена." << endl;
}
// Функция для просмотра файла
void viewFile() {
ifstream file("contest_data.bin", ios::binary);
if (!file) {
cout << "Файл не существует." << endl;
return;
}
Participant participant;
while (file.read((char*)&participant, sizeof(Participant)) && !file.eof()) {
cout << "Ф.И.О.: " << participant.name << endl;
cout << "Год рождения: " << participant.birthYear << endl;
cout << "Страна: " << participant.country << endl;
cout << "Инструмент: " << participant.instrument << endl;
cout << "Место на конкурсе: " << participant.place << endl;
cout << "-------------------" << endl;
}
file.close(); // Закрываем файл после просмотра данных.
}
// Функция для выполнения задачи: вывод самого молодого лауреата
void youngestWinner() {
ifstream file("contest_data.bin", ios::binary);
if (!file) {
cout << "Файл не существует." << endl;
return;
}
Participant youngestLaureate("", numeric_limits<int>::max(), "", "", 0);
bool laureateFound = false;
Participant participant;
while (file.read((char*)&participant, sizeof(Participant)) && !file.eof()) {
if (participant.place >= 1 && participant.place <= 3 && participant.birthYear < youngestLaureate.birthYear) {
youngestLaureate = participant;
laureateFound = true;
}
}
file.close();
if (laureateFound) {
cout << "Самый молодой лауреат:" << endl;
cout << "Ф.И.О.: " << youngestLaureate.name << endl;
cout << "Год рождения: " << youngestLaureate.birthYear << endl;
cout << "Страна: " << youngestLaureate.country << endl;
cout << "Инструмент: " << youngestLaureate.instrument << endl;
cout << "Место на конкурсе: " << youngestLaureate.place << endl;
}
else {
cout << "Лауреаты не найдены." << endl;
}
}
// Функция для выполнения задачи: вывод списка участников по инструментам в порядке занятых мест
void participantsByInstrument() {
ifstream file("contest_data.bin", ios::binary);
if (!file) {
cout << "Файл не существует." << endl;
return;
}
vector<Participant> participants;
Participant participant;
while (file.read((char*)&participant, sizeof(Participant)) && !file.eof()) {
participants.push_back(participant);
}
file.close();
if (!participants.empty()) {
sort(participants.begin(), participants.end(), [](const Participant& a, const Participant& b) {
return a.instrument < b.instrument || (a.instrument == b.instrument && a.place < b.place);
});
cout << "Список участников по инструментам в порядке занятых мест:" << endl;
for (const Participant& p : participants) {
cout << "Инструмент: " << p.instrument << ", Место: " << p.place << ", Ф.И.О.: " << p.name << endl;
}
}
else {
cout << "Участники не найдены." << endl;
}
}
int main() {
setlocale(LC_ALL, "Russian");
int choice;
while (true) {
cout << "Меню:" << endl;
cout << "1 – Создание нового файла" << endl;
cout << "2 – Просмотр файла" << endl;
cout << "3 – Добавление записи" << endl;
cout << "4 – Самый молодой лауреат" << endl;
cout << "5 – Участники по инструментам" << endl;
cout << "6 – Выход" << endl;
cout << "Выберите действие: ";
cin >> choice;
switch (choice) {
case 1:
createFile();
break;
case 2:
viewFile();
break;
case 3:
addEntry();
break;
case 4:
youngestWinner();
break;
case 5:
participantsByInstrument();
break;
case 6:
return 0;
default:
cout << "Неверный выбор. Попробуйте снова." << endl;
}
}
return 0;
}