首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用_kbhit()和_getch()作为输入,如何清除用户的输入流?

使用_kbhit()和_getch()作为输入,如何清除用户的输入流?
EN

Stack Overflow用户
提问于 2016-10-21 19:29:02
回答 2查看 3.2K关注 0票数 2

我正在使用控制台在C++上制作一个游戏,这涉及到一场基于回合的战斗。在战斗中,我使用Sleep()函数来延迟消息,当键被击中时,消息就会向前推进。我的问题是,虽然游戏是“暂停”的睡眠功能,它仍然计数用户的按键,然后开始使用他们。

例如,如果一个用户在游戏睡觉时按了四次"a“键,它就会在被按下很久之后,继续使用该键四次。

我如何暂时“关闭”用户的键按下注册程序的能力?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-21 20:15:57

_kbhit()getch()是缓冲函数。在睡觉时输入的所有内容都将被发送到缓冲区,并将在您的函数一醒来读取新的kb命中就会被依次处理。

作为非缓冲的替代方案,您可以考虑使用GetKeyboardState()在特定时刻获取键盘的状态。它没有缓冲,所以它更适合你的游戏。

票数 0
EN

Stack Overflow用户

发布于 2016-10-21 19:39:12

AFAIK你不能关闭它,但是你可以忽略击键,而是有一个忽略所有击键的循环。

例如:

代码语言:javascript
运行
复制
time_t delay = 10;  // timeout delay
time_t start = time(NULL); // normally returns seconds

do
{
  if (_kbhit()) getch();
}
while (time(NULL) - start < delay);

当然,您还可以在等待循环中执行其他操作,还可以检查按下了什么键,然后中断while循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40184184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档