当循环再次运行时,为什么不输出“请再试一次”?

时间:2017-09-22 05:23:12

标签: c++ loops while-loop io cout

您好我正在尝试学习c ++,我想对程序进行一些练习。但是我在循环中使用cout时遇到了麻烦。

这是我正在尝试输出文本的循环。当用户输入无效的号码时,应该说“抱歉再试一次!”

while (datecheck)
{
    bool check(false);
    if (check)
        std::cout<<"Sorry try again!"<<std::endl;
    std::cin>>c;
    if (c >= 1)
    {
        if (b == 2 && c <= 28)
            datecheck = false;
        if (b == 2 && a % 4 == 0 && c <= 29) 
            datecheck = false;
        if (b == 4 || b == 6 || b == 9 || b == 11 && c <= 30) 
            datecheck = false;
        if (c <= 31) 
            datecheck = false;
    }
    check = true;
}

当它输出并且我故意让自己处于循环中时它不输出任何东西

Year: -20
-20
-20

2 个答案:

答案 0 :(得分:0)

您在每次次迭代时声明一个全新的变量check。并且每次都将该变量初始化为false。所以在while循环之前移动该声明。

改变这个:

while (datecheck)
{
    bool check(false);
    ...
    check = true;
}

到此:

bool check(false);
while (datecheck)
{
     ...
    check = true;
}

答案 1 :(得分:-1)

问题在于bool check(false);的声明。这会在每次迭代开始时继续将值重新分配给false

一个简单的解决方法可能是摆脱使用check变量并仅使用datecheck

bool datecheck(true);
while (true)
{
    std::cin>>c;
    if (c >= 1)
    {
        if (b == 2 && c <= 28)
            datecheck = false;
        if (b == 2 && a % 4 == 0 && c <= 29) 
            datecheck = false;
        if (b == 4 || b == 6 || b == 9 || b == 11 && c <= 30) 
            datecheck = false;
        if (c <= 31) 
            datecheck = false;
    }
    if (datecheck)
    {
        std::cout<<"Sorry try again!"<<std::endl;
    }
    else
    {
        break;
    }
}