#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()
цикла? Я думаю, что это было бы более читабельно.