【问题标题】:getch Alternativegetch 替代方案
【发布时间】:2010-10-17 19:54:58
【问题描述】:

众所周知,getch 会一直等到用户按下某个键,然后返回该值。有没有办法只检查用户当前是否正在按键?这是我想要做的:

while(1){
char x = getch();
if (x){
//blah
}
else if(y == true){
//blah
}
}

有什么建议吗?

【问题讨论】:

  • 您不能在标准 C++ 中执行此操作。事实上,getch 也不是标准的。所以你需要指定你正在使用的环境和库。
  • 没有平台无关的方式。您正在使用什么平台?

标签: c++ visual-studio-2008 visual-c++ conio


【解决方案1】:

kbhit() 函数(如果您使用的是 Microsoft 的库,则为 _kbhit())。

MSDN:http://msdn.microsoft.com/en-us/library/58w7c94c(VS.80).aspx

"如果按键被按下,_kbhit 返回非零值,否则返回 0。"

编辑:正如一些评论者指出的那样,这不是标准的。

【讨论】:

    【解决方案2】:

    如果您只是想暂停脚本直到按下某个键,那么 getch 可以工作,但是如果您希望他们按下的角色不出现在屏幕上(或者您不关心他们按下了哪个键),您可以用

    system("pause > NUL");
    

    它调用 Windows“暂停”命令并将显示的文本和输入(通常说“按任意键继续...”)路由到一个空的深渊。

    另一种方法是使用 GetAsyncKeyState() 之类的函数并循环遍历所有输入代码以查看当前是否有任何键被按下。如果您尝试运行处理循环并希望在用户按下特定键(例如,Escape)时中断,则此方法效果更好。使用它来查看用户是否按下任何键会浪费大量的处理能力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2010-09-10
      • 2012-12-05
      • 2013-11-22
      相关资源
      最近更新 更多