定时器没有运行,看不出原因 - C ++

时间:2013-08-25 00:22:27

标签: c++ timer while-loop

我正在尝试制作一个倒计时器,由于某种原因它似乎没有执行(小时> = 1)  正确陈述 - 如果我发表评论

--Hour;
Minute = Minute +60;

程序从60开始精细倒计时,然后每分钟减少一分钟并重新开始60秒...有人可以向我解释为什么小时减量不想工作?我是c ++和编程的新手,所以如果你能保持尽可能简单的话 谢谢。 以下代码段:

while (Hour >= 1)
{
    while (Minute >= 1)
    {
        while (Second >= 1)
        {
            Sleep(1000);
            --Second;
            cout << Hour << " hours, " << Minute << " minutes, " << Second << " seconds;\n";
        }

        Second = Second + 60;
        --Minute;
    }

    Minute = Minute + 60;
    --Hour;
}

1 个答案:

答案 0 :(得分:0)

首先,为了使您的代码更加一致,我建议您在打印当前时间并将所有比较更改为--Second;后移动Time >= 0

int main(void)
{
  int Hour = 1;
  int Minute = -1;
  int Second = -1;

  while (Hour >= 0)
  {
    while (Minute >= 0)
    {
      while (Second >= 0)
      {
        Sleep(1000);
        cout << Hour << " hours, "
             << Minute << " minutes, "
             << Second << " seconds;" << endl;
        --Second;
      }

      Second += 60;
      --Minute;
    }

    Minute += 60;
    --Hour;
  }

  return 0;
}

现在,当您运行程序时,只要Second == -1,这意味着当前分钟内不再有剩余秒数。当Minute == -1您在一小时内没有剩余时间,以及Hour == -1您的时间已经完全消失时。

在C ++中,循环在每次运行开始时进行评估。上面的代码减去分钟,然后是秒,然后显示减去小时数之前的时间。

如果您的分钟和秒最初初始化为0,则以下代码的行为与上述代码相似(可能没有用)。

while (Hour > 0)
{
  Minute += 60;
  --Hour;

  while (Minute > 0)
  {
    Second += 60;
    --Minute;

    while (Second > 0)
    {
      --Second;
      //sleep(1);
      cout << Hour << " hours, "
           << Minute << " minutes, "
           << Second << " seconds;" << endl;
    }
  }
}

这段代码在显示时间之前递减小时,然后是分钟,然后是秒。第二个示例的一个优点是HourMinuteSecond始终为正,因此您可以将其定义替换为unsigned int

编辑:正如BenVoigt指出的那样,上面的第二段代码会很高兴地写出大于60的分钟和秒数(可能不是你想要的)。

希望这些例子有所帮助。

附加说明:在C ++中,您可以使用Minute += 60;代替Minute = Minute + 60;。这只是简写。