当循环再次运行时,为什么不输出“请再试一次”?
问题描述:
你好,我正在尝试学习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循环之前移动该声明。
更改此:
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;
}
}
在循环内部,通过局部变量的初始化设置您的标志为false。那么如果它是真的,你输出。你什么时候期望产出? – Yunnosch
移动行'布尔检查(false);'出while循环。和'check = true;'应该是其他条件的一部分。 – MKR
等待我很笨。我猜是什么时候重新启动循环并将该标志声明为false。我的错。多谢你们。 – amgtree