即使仍满足条件,此循环也会终止。

时间:2017-09-22 06:57:05

标签: c++ loops

您好这是我对同一个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:

是否使用小于或大于的语句?

1 个答案:

答案 0 :(得分:1)

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

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

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