Ошибка при повторном обращении к файлу в цикле на второй итерации
char line[30];
void write_dict() {
ifstream file("Словарь.txt");
ofstream file_out("Результат.txt");
//some code
file.close();
file_out.close();
}
void add_words(char search_letter) {
ifstream file("Словарь.txt");
ofstream file_out("Результат.txt", ios_base::app); //Дописать информацию в конец файла
//some code
file.close();
file_out.close();
}
void output(char *name_of_file) {
ifstream file(name_of_file);
while (!file.eof()) {
file.getline(line, 30);
int index(0);
while (line[index] != '\0') {
cout << line[index];
index++;
}
cout << endl;
}
file.close();
}
void repeat_program() {
bool condition = true;
int choice_number;
char search_letter;
while (condition) {
write_dict();
add_words(search_letter);
output("Результат.txt");
cout << "\nХотите продолжить?\n 1. Хочу продолжить.\n 2. Хочу выйти.\nВаш выбор: ";
cin >> choice_number;
if (choice_number == 2) {
cout << "\nРабота завершена." << endl;
condition = false;
}
}
}
Суть программы: в функции write_dict() частично содержимое файла "Словарь.txt" записывается в файл "Результат.txt" , в функции add_words(char search_letter) в файл "Результат.txt" дописываются слова из файла "Словарь.txt" соблюдая некоторое условие(подробности опускаю и код даю частичный, в целях избежать громоздкости и не потерять суть проблемы), в функции output(char *name_of_file) содержимое файла "Результат.txt" выводится на экран, в функции repeat_program() весь алгоритм повторяется, пока пользователь этого желает. Проблема: всё отлично выполнится в первый раз, но когда алгоритм начнёт повторятся в строке ifstream file("Словарь.txt"); в функции write_dict() возникнет ошибка "Необработанное исключение по адресу 0x0F53234C (msvcp140d.dll) в task1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xEBE2FF20." С помощью дебагера я поняла, что причина кроется в строке ofstream file_out("Результат.txt", ios_base::app); функции add_words(char search_letter). Если не создавать файл file_out для дозаписи в него информации и выводить всё просто на экран консоли, то всё работает. Как решить эту проблему?