关于_kbhit,求教

Dark_Spider 2014-05-22 12:34:33

char ch;
while(1)
{
if(_kbhit())
ch = _getch();
if(ch == 27)
cout<<"Bye!"<<endl;
}

不理解的是,为什么我只按了一次 ESC,为啥一直会打印出 Bye!
我预期的是,每次while循环,等待键盘输入,输入ESC,打印Bye!;然后继续等待,继续输入,继续打印。。。

还有啊,我去掉了while循环后,单独的if(_kbhit()) 没法用了。菜鸟求解答
...全文
246 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dark_Spider 2014-05-22
  • 打赏
  • 举报
回复
引用 2 楼 assembly 的回复:
写if的时候,永远带着括号。

char ch;
while(1) {
    if(_kbhit()) {
         ch = _getch();
         if(ch == 27) {
              cout<<"Bye!"<<endl;
         }
    }
}
嗯嗯,好的习惯,我记下了。
Dark_Spider 2014-05-22
  • 打赏
  • 举报
回复
引用 1 楼 shenchenman 的回复:
1 循环结束你把ch重置呀 2 没while循环怎么知道什么时候获取键盘消息?while的作用就是一直获取消息
是哦,多谢! 没重置ch,一下子醒了
assembly 2014-05-22
  • 打赏
  • 举报
回复
写if的时候,永远带着括号。

char ch;
while(1) {
    if(_kbhit()) {
         ch = _getch();
         if(ch == 27) {
              cout<<"Bye!"<<endl;
         }
    }
}
shenchenman 2014-05-22
  • 打赏
  • 举报
回复
1 循环结束你把ch重置呀 2 没while循环怎么知道什么时候获取键盘消息?while的作用就是一直获取消息
【源码免费下载链接】:https://renmaiwang.cn/s/jwcqg 在C/C++编程中,获取键盘事件通常是为了实时响应用户的输入。本文将详细介绍如何使用C++来捕获和处理键盘事件,特别是在Visual Studio环境下。我们需要了解的是,C++标准库本身并不直接提供键盘事件处理的功能,但可以通过一些特定的非标准库函数或者第三方库来实现。在VS(Visual Studio)环境中,可以使用``这个非标准的Windows API头文件来获取键盘事件。`_kbhit()`函数是这个头文件中的一个关键函数,它用于检测是否有键盘事件发生。如果用户已经按下了一个键,`_kbhit()`会返回非零值(真),否则返回零(假)。例如:```cpp#include #include int main() { int ch; while (1) { if (_kbhit()) { // 检查是否有键盘事件 ch = _getch(); // 获取按键值,不包括回车 std::cout << ch; if (ch == 27) { // ESC键的键值是27,用于退出循环 break; } } } system("pause"); return 0;}```在上面的代码中,`_getch()`函数用于读取用户输入的字符,它不会等待用户按下回车键,而是立即返回按键的ASCII码。`_getch()`函数通常与`_kbhit()`配合使用,以便只在有键盘事件时才读取字符,避免程序阻塞。ASCII码是字符编码的一种标准,每一个按键都对应一个ASCII码值。例如,字母"A"的ASCII码是65,数字"1"的ASCII码是49,空格的ASCII码是32,而ESC键的ASCII码是27。在处理键盘事件时,可以依据这些ASCII码来判断用户

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧