Повторный запуск программы С++
У нас есть главное окно программы (см. 1 изобр.). Если в поле «Ввод:» ввести любой ответ, с которым программа не знакома (то есть, сработает else), то мы получаем бесконечный цикл повторного открытия главного окна (см. 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();
}
}
Ответы (1 шт):
Начнем с мелочи — вызывать main() рекурсивно — очень плохая практика.
А теперь к сути.
int setting;
std::cin >> setting;
Допустим, вы вводите не число. Что получается? cin переходит в состояние fail, все дальнейшие операции с ним игнорируются, т.е. не происходит никакого чтения к консоли, выполнение переходит к следующей строке.
После ввода лучше всегда проверять состояние потока, и если с ним беда — очистить его (cin.clear()) и сбросить буфер ввода...

