您好这是我对同一个c ++程序的第二个问题(对不起,如果这是一个简单的问题)
我正在尝试使用循环来检查输入是否有效。但是,如果输入有效,则此循环似乎不尊重。
int b(-1);
check = false;
while (b < 1 || b > 12)
{
if (check)
std::cout<<"Sorry try again!\nMonth: ";
std::cin>>b;
check = true;
{
如果用户输入1到12之间的值。否则继续循环。
然而,当我运行程序并输入无效输入时,它会继续。
Year: 2017
Month *In number format*: 20
Day:
偶数-1不起作用,这很奇怪,因为我在循环开始之前将值设置为-1。
Year: 2017
Month *In number format*: -1
Day:
是否使用小于或大于的语句?
答案 0 :(得分:1)
如果输入无效输入,将设置流的失败位。在这种情况下,目标变量(b
)不会被修改,只要您不清除该位,operator>>
的每次后续调用也将失败,无论您提供什么输入。实际上,根本不会从流中获取输入,因此您将一次又一次地重新读取它。
你应该检查std::in
的状态,如果需要清除错误位并丢弃无效输入:
if(std::in.fail())
{
std::in.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}