用户输入日期,目前已验证以确保该值介于 1 和 31 之间(含)。
但是,如果他们输入一个非整数值,它只会在无限循环中不断重复错误消息。
我四处寻找答案,但其他提出问题的人似乎在 C++ 方面比我高级得多,因此我什至不理解他们的初始代码。
这是代码
void Menu::setDate()
{
date = 0;
std::cout << "Please enter todays date: (as an integer) ";
do
{
std::cin >> date;
if (date > 0 && date < 32)
{
break;
}
std::cout << "Error: Please enter todays date: (as an integer) ";
}
while (true);
}
最佳答案
您的代码的问题是当输入无效整数时,流会出错并设置为 failbit。因此,您需要先清除它,然后才能再次使用 I/O 操作。试试这个:
void Menu::setDate()
{
date = 0;
std::cout << "Please enter todays date: (as an integer) ";
while(true){
std::cin >> date;
if(date > 0 && date < 32){
break;
}
else{
std::cout << "Error, please enter today's date (as an integer):" << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
}
关于C++检查整数变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20976439/