2017-09-22 99 views
-4

你好,这是我的第二个问题为同一个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

对不起,我错误地把错误的大括号。 – amgtree

+0

通过再次更新您的问题来纠正它。 –

回答

1

如果输入无效输入,流的失败位将被设置。在这种情况下,目标变量(b)不会被修改,只要您不清除该位,则无论您提供什么输入,随后每次调用operator>>都会失败。实际上,输入不是从流中取出的,所以你会一遍又一遍地重新读取它。

您应该检查的std::in状态,如果需要的话清楚的错误位,并丢弃无效输入:

if(std::in.fail()) 
{ 
    std::in.clear(); 
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
} 
+0

也谢谢你 – amgtree

相关问题