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

Рейтинг: 0Ответов: 1Опубликовано: 10.02.2023

У нас есть главное окно программы (см. 1 изобр.). Если в поле «Ввод:» ввести любой ответ, с которым программа не знакома (то есть, сработает else), то мы получаем бесконечный цикл повторного открытия главного окна (см. 2 изобр.). Из-за чего это происходит?

Если я не прав насчёт такой реализации «повторного» запуска программы, то почему же так нельзя сделать?

описание1описание2

int main() 
{
    setlocale(LC_ALL, "Russian");
    int setting;
    std::cout << "Укажите тип ввода данных:\n1 — С клавиатуры\n2 — Из файла\nВвод: ";
    std::cin >> setting;
    if (setting == 2){
        open_and_read();
    }
    else if (setting == 1) {
        per_enter();
        int setting;
        std::cout << "Хотите повторить ввод исходных данныех?\n1 — Да\n2 — Нет\nВвод: ";
        std::cin >> setting;
        if (setting == 1 || "Да") {
            main();
        }
        else if (setting == 2 || "Нет") {
            std::cout << "Работа программы заврешена." << std::endl;
        }
    }
    else{
        std::cout << "Ответ не соответствует ни одному из доступных вариантов ввода." << std::endl;
        main();
    }
}

Ответы

▲ 2Принят

Начнем с мелочи — вызывать main() рекурсивно — очень плохая практика.

А теперь к сути.

int setting;
std::cin >> setting;

Допустим, вы вводите не число. Что получается? cin переходит в состояние fail, все дальнейшие операции с ним игнорируются, т.е. не происходит никакого чтения к консоли, выполнение переходит к следующей строке.

После ввода лучше всегда проверять состояние потока, и если с ним беда — очистить его (cin.clear()) и сбросить буфер ввода...