Ошибка при проверке ввода с использованием std::cin

#c #validation #user-input #iostream

#c #проверка #пользовательский ввод #iostream

Вопрос:

Я реализовал эту проверку в своей программе, чтобы определить, имеет ли ввод правильный тип или нет, и если нет, то запрашивается перезапись ввода. Если ввод неверен, он работает просто отлично, но, если ввод правильный, вам нужно записать его снова. Как я могу этого избежать? (вы можете найти пример здесьhttps://godbolt.org/z/KjoTbc )

 #include <iostream>
#include <limits>

int main() {

int input;
std::cin >> input ;
while (!(std::cin >> input)) { 
std::cin.clear(); 
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
std::cout << "Please, write an integer numbern"; 
};
}
  

Комментарии:

1. Учитывая, что у вас есть два cin >> input оператора, неудивительно, что он запрашивает у вас ввод дважды. Вы только что пытались удалить первый cin >> input ? Непонятно, что он там делает.

2. Да, приведенный ниже ответ был удовлетворительным, извините, но я пока не могу отметить это как решенное.

Ответ №1:

Вы не проверяете первый std::cin >> input ; и запускаете while (!(std::cin >> input)) , который запрашивает ввод, безоговорочно.

Удалите первое непроверенное чтение и попробуйте это:

 #include <iostream>
#include <limits>

int main() {

    int input;
    while (!(std::cin >> input)) { 
        std::cin.clear(); 
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
        std::cout << "Please, write an integer numbern"; 
    }
}
  

Комментарии:

1. Хорошо, это работает. Есть ли способ реализовать этот же процесс с другим условием внутри while() цикла? Я думаю, что это было бы более читабельно.