getch替代方案

时间:2010-10-17 19:54:58

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

正如大多数人所知,getch会等到用户点击某个键然后返回该值。有没有办法只是检查用户当前是否正在按键?这是我正在尝试做的事情:

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

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

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

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

“如果按下某个键,_kbhit将返回非零值。否则,它将返回0.”

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

答案 1 :(得分:0)

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

system("pause > NUL");

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

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