When you restart the search results are not displayed and are not written to the file. At primary everything works. Where is the error here?

#include <iostream> #include <iomanip> #include <string> #include <conio.h> #include <fstream> using namespace std; void create(); void open(); void menu(); void menu2(); void spisok_inst(); void spisok_kaf(); void phone(); struct spisok { char name_isnt[100]; char num_korp[100]; char name_kaf[100]; char phone_kaf[100]; }; spisok sp[100]; int n = 0; void menu() { int key; cout << endl; cout << " ГЛАВНОЕ МЕНЮ" << endl << endl; cout << "1) Создать файл" << endl; cout << "2) Открыть файл" << endl; cout << "3) Поиск" << endl; cout << "4) Выход" << endl; cin >> key; switch(key) { case 1: create(); break; case 2: open(); break; case 3: menu2(); break; case 4: exit(0); } getch(); system("cls"); } void create() { char filename[100]; cout << "Введите название файла: "; cin >> filename; system("cls"); ofstream fout; fout.open(filename); char answer; do { cout << "Введите название института: "; cin >> sp[n].name_isnt; cout << "Введите номер корпуса: "; cin >> sp[n].num_korp; cout << "Введите название кафедры: "; cin >> sp[n].name_kaf; cout << "Введите телефон кафедры: "; cin >> sp[n].phone_kaf; cout << endl; cout << "Вы хотите ввести еще данные? (y/n)" << endl; cin >> answer; cout << endl; n++; } while(answer == 'y'); fout << "|Название института|Номер корпуса|Название кафедры|Телефон кафедры|" << endl; fout << "|==================|=============|================|===============|" << endl; for(int i=0; i<n; i++) fout << setw(5) << sp[i].name_isnt << setw(18) << sp[i].num_korp << setw(15) << sp[i].name_kaf << setw(25) << sp[i].phone_kaf << endl; fout.close(); cout << "Файл сохранен"; getch(); system("cls"); menu(); } void open() { system("cls"); char filename[100]; cout << "Введите название файла: "; cin >> filename; ifstream fin; fin.open(filename); if(!fin.is_open()) { cout << "Файл не найден."; getch(); system("cls"); menu(); } while(!fin.eof()) { string s; getline(fin, s); cout << s << endl; } fin.close(); getch(); system("cls"); menu(); } void menu2() { system("cls"); int key; cout << " Меню 2:" << endl << endl; cout << "Искать:" << endl; cout << "1) список институтов" << endl; cout << "2) список кафедр" << endl; cout << "3) номер телефона кафедры" << endl << endl; cout << "4) выйти из программы" << endl; cin >> key; switch(key) { case 1: spisok_inst(); break; case 2: spisok_kaf(); break; case 3: phone(); break; case 4: exit(0); } getch(); system("cls"); menu(); } void spisok_inst() { system("cls"); char filename[100]; cout << "Введите название файла: "; cin >> filename; ifstream f1; f1.open(filename); if(!f1.is_open()) { cout << "Файл не найден."; getch(); system("cls"); menu(); } string s; while(!f1.eof()) { getline(f1, s); cout << s << endl; } f1.close(); string num_korp1; cout << endl << "Введите номер корпуса: "; cin >> num_korp1; cout << endl << "Список интистутов, находящихся в " << num_korp1 << " корпусе" << endl; for(int i=0; i<n; i++) { if(num_korp1 == sp[i].num_korp) cout << sp[i].name_isnt << endl; } ofstream f2; cout << endl << "Введите название файла: "; cin >> filename; f2.open(filename); f2 << "Список интистутов, находящихся в " << num_korp1 << " корпусе" << endl; for(int i=0; i<n; i++) { if(num_korp1 == sp[i].num_korp) f2 << sp[i].name_isnt << endl; } cout << endl << "Файл сохранен" << endl; f2.close(); getch(); system("cls"); menu(); } void spisok_kaf() { system("cls"); char filename[100]; cout << "Введите название файла: "; cin >> filename; ifstream f1; f1.open(filename); if(!f1.is_open()) { cout << "Файл не найден."; getch(); system("cls"); menu(); } string s; while(!f1.eof()) { getline(f1, s); cout << s << endl; } string name_inst1; cout << endl << "Введите название института: "; cin >> name_inst1; cout << endl << "Список кафедр, входящие в институт " << name_inst1 << endl; for(int i=0; i<n; i++) { if(sp[i].name_isnt == name_inst1) cout << sp[i].name_kaf << endl; } f1.close(); ofstream f2; cout << endl << "Введите название файла: "; cin >> filename; f2.open(filename); f2 << "Список кафедр, входящие в институт " << name_inst1 << endl; for(int i=0; i<n; i++) { if(sp[i].name_isnt == name_inst1) f2 << sp[i].name_kaf << endl; } cout << endl << "Файл сохранен" << endl; f2.close(); getch(); system("cls"); menu(); } void phone() { system("cls"); char filename[100]; cout << "Введите название файла: "; cin >> filename; ifstream f1; f1.open(filename); if(!f1.is_open()) { cout << "Файл не найден."; getch(); system("cls"); menu(); } string s; while(!f1.eof()) { getline(f1, s); cout << s << endl; } f1.close(); string phone1; cout << endl << "Введите название кафедры: "; cin >> phone1; cout << endl << "Номер телефона кафедры " << phone1 << endl; for(int i=0; i<n; i++) { if(sp[i].name_kaf == phone1) cout << sp[i].phone_kaf << endl; } ofstream f2; cout << endl << "Введите название файла: "; cin >> filename; f2.open(filename); f2 << "Номер телефона кафедры " << phone1 << endl; for(int i=0; i<n; i++) { if(sp[i].name_kaf == phone1) f2 << sp[i].phone_kaf << endl; } cout << endl << "Файл сохранен" << endl; f2.close(); getch(); system("cls"); menu(); } int main() { setlocale(LC_ALL, "rus"); menu(); getch(); system("cls"); } 
  • one
    See if you are allowed to overwrite an existing file when opening a file, the problem may be that you need certain file access specifiers in pk-infest
  • 2
    Try to shorten the program to a minimum that reproduces the same problem. To disassemble this sheet somehow reluctant. - VladD

0