为什么循环再次运行时不输出 "Please try again"?
Why doesn't this output "Please try again" when loop runs again?
你好,我正在尝试学习 C++,我想用一个程序进行一些练习。但是我在循环中使用 cout 时遇到了问题。
这是我试图从中输出文本的循环。当用户输入一个无效的数字时,它应该说 "Sorry try again!"
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;
}
}
你好,我正在尝试学习 C++,我想用一个程序进行一些练习。但是我在循环中使用 cout 时遇到了问题。
这是我试图从中输出文本的循环。当用户输入一个无效的数字时,它应该说 "Sorry try again!"
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;
}
}