【问题标题】:Why doesn't this output "Please try again" when loop runs again?为什么循环再次运行时不输出“请重试”?
【发布时间】:2018-03-03 14:22:54
【问题描述】:

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

【问题讨论】:

  • 您在循环内部通过局部变量的初始化将您的标志设置为 false。然后如果它是真的,你输出。你预计什么时候输出?
  • bool check(false); 行移出while 循环。 check = true; 应该是 else 条件的一部分。
  • 等等,我很笨。我猜当它重新启动循环并将标志声明为假时。我的错。谢谢大家。

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


【解决方案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;
    }
}

【讨论】:

  • 您想为您的纯代码答案添加解释吗?给人一种 StackOverflow 是免费编码服务的印象在这里并不受欢迎。
【解决方案2】:

您在每次迭代中声明一个新变量check。你每次都将该变量初始化为false。所以将声明移到 while 循环之前。

改变这个:

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

到这里:

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

【讨论】:

  • 我认为它在循环结束时执行@MKR。
  • 如果我运行一个每次都做同样事情的类似循环,我是否必须将变量重新声明为 false?
  • 好的,我解决了代码问题。再次感谢!我还有另一个关于另一个 sn-p 代码的问题。我应该问一个新问题还是应该在哪里问?
  • 好@amgtree。是的,如果您愿意,可以发布一个新问题并与我分享链接。
猜你喜欢
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
  • 2021-06-21
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
相关资源
最近更新 更多