Повторный запуск программы

175
15 декабря 2016, 16:09

При повторном запуске результаты поиска не выводятся и не записываются в файл. При первичном все работает. Где здесь ошибка?

#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");
}
READ ALSO
Пример реализации классов в UML для C++ кода

Пример реализации классов в UML для C++ кода

Вот что написано: реализация – это способ показать наследование интерфейса в UMLКогда мы говорим, что класс A реализует интерфейс B, это значит,...

209
Как узнать адрес начала массива в ассемблере?

Как узнать адрес начала массива в ассемблере?

Нужно с использованием оператора LEA узнать адрес начала списка символов, чтобы потом с помощью XLAT выбрать нужный символС обычной переменной...

283
-1.#IND  без деления на 0

-1.#IND без деления на 0

Прочитал, что такая ошибка при делении на ноль, но у меня нет никакого деления, самая простая программа:

264
Как вызвать функцию из строки?

Как вызвать функцию из строки?

Есть много функций с одинаковым именем и разной цифрой в конце этого имени, то есть function1, function2, function3 и тд

227