Мой профессор C++ непреклонен в том, что при проверке отказа ввода необходимо использовать отдельные петли while()
для каждого отдельного входа. Он указал, что следующий метод проверки более одного входа собрались в одном cin
заявление не будет работать:Ошибка ввода C++: несколько входов в одном заявлении
while (!good){
cout << "Enter the length and the width of the rectangle: ";
cin >> length >> width;
if(!cin){
cout << "Bad input, try again" << endl;
cin.clear();
cin.ignore(200, '\n');}
else {
good = true;}}
Его предложенный метод:
bool good = false;
while (!good){
cout << "Enter the length rectangle: ";
cin >> length;
if(!cin){
cout << "Bad input, try again" << endl;
cin.clear();
cin.ignore(200, '\n');}
else {
good = true;}}
while (good){
cout << "Enter the width rectangle: ";
cin >> width;
if(!cin){
cout << "Bad input, try again" << endl;
cin.clear();
cin.ignore(200, '\n');}
else {
good = false;}}
Мой метод выше, кажется, работает нормально. Если для любого из входов вводятся нечисловые символы, цикл будет запрашивать новый вход и очистить состояние отказа.
Это просто считается плохой формой, чтобы проверить входной сбой, как я это сделал? Я надеюсь узнать более ясно почему мой метод ошибочен. Если мой метод неисправен, существует ли способ проверить входной сбой без использования отдельных циклов для каждого входа пользователя? Я в основном спрашиваю, потому что я пишу программу, которая включает в себя получение большого количества входов из файла, и индивидуальная проверка каждой переменной кажется слишком утомительной. Я думаю, что должен быть лучший способ.
Ваш преподаватель должен узнать об этом новом синтаксисе (всего около 40 лет) называется Do-то время. –
Сближение с греческим псевдонимом: обратите больше внимания, ни одна из версий кода не проверяет флаг 'eof'. –
Вы можете найти [C++ FAQ: как я могу получить std :: cin для пропуска недопустимых символов ввода?] (Https://isocpp.org/wiki/faq/input-output#istream-and-ignore) полезно (см. второй пример кода.) –