为什么当循环再次运行时,此输出"请重试"?

Why doesn't this output "Please try again" when loop runs again?

本文关键字:输出 重试 循环 运行时 为什么      更新时间:2023-10-16

你好,我正在尝试学习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

您在中声明一个新的变量check。并且您每次都将该变量初始化为false。因此,在段循环之前移动该声明。

更改此内容:

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

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

问题是 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;
    }
}