0

我正在尝试制作一个倒数计时器,由于某种原因,它似乎没有正确执行 (Hour >= 1) while 语句——如果我注释掉

--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;
}
4

1 回答 1

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;
    }
  }
}

这段代码在显示时间之前先递减几小时、几分钟、几秒。第二个示例的一个优点是Hour,MinuteSecond始终是正数,因此您可以将它们的定义替换为unsigned int

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

希望这些例子有所帮助。

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

于 2013-08-25T03:16:06.723 回答