0

所以,这里是一个倒计时。我的目标是下一个:如果您在给定的时间(ent_sec)内不做任何事情,倒计时将在一段时间后达到 0 并返回 0,但是如果您按下字母 c(代码:99)倒计时停止并且您可以输入您的 PIN 码并返回。我已经通过以下方式解决了 Windows.h 的问题:

if (GetAsyncKeyState(VK_SPACE))

这解决了问题是通过WIN32 API(在这种情况下你必须按SPACE,而不是字母'c'),但它显示我不能使用任何WinAPI函数(学校项目)。所以我将此行重写为以下内容:

if (getchar() == 99)

但不幸的是,它不能以正确的方式工作,导致我的倒计时几乎每一秒都会停止,直到我没有按一些“错误”键(例如我按“x”,然后倒计时继续,但在下一个秒它再次停止)......在第一个解决方案(win func)中,这个问题不存在......那么我该如何解决呢?谢谢。这是我的函数的完整代码:

unsigned Timer::DownCount
{
  int ent_sec = this.time;

  cout << "The counter has started (" << this.time << "sec), press 'C' to enter your PIN code: " << endl;


  while (ent_sec >= 0)                                       
  {
    if (getchar() == 99)    // c letter's code is 99 in ANSI (or ASCII dunno)                       
    {                                               
        unsigned code;

        cout << "PIN code: ";
        cin >> code;    

        return code;
    }

    else
    {
        SecCounter(1);     // this function counts 1 secundum
        cout << ent_sec << endl;
        ent_sec--;
    }
  }
return 0;
}
4

1 回答 1

1

我不相信有一种标准方法可以在所有平台上工作,但这是一种无需实际使用 Windows API 函数即可在 Windows 上工作的方法。

int getch_nowait()
{
  if (!kbhit()) return -1;
  return getch();
}

然后你的支票就变成了if (getch_nowait() == 99) ...

此代码可能是特定于编译器的。如果它不适合您,如果您告诉我们您使用的是什么编译器和操作系统,它会有所帮助。

于 2013-05-10T20:53:15.900 回答