【问题标题】:Easy way to work with keyboard input?使用键盘输入的简单方法?
【发布时间】:2014-02-11 12:25:20
【问题描述】:

我正在使用 C++ 中的图形模式制作一个简单的程序,我在处理输入时遇到了麻烦。 我只需要一种检查键盘的方法,如果按下了任何键,则将键值存储在变量中, getch() 的问题是它一直等到按下任何键,如果用户没有输入,我需要程序继续运行。 我进行了一项研究,似乎有数百种方法可以做到这一点。 哪个最简单?

示例: 循环开始,程序检查是否有任何输入并将其存储,程序处理该输入,然后将其丢弃以再次开始循环。这将与getch() 完美配合,不是吗?好吧,如果这次没有按下任何键,我希望循环也继续进行。一种无输入默认模式,因此进程不会停止。

(我真正想要的是不等待用户输入的getch())。

Windows、Code::Blocks IDE、GCC 编译器

是的,kbhit 似乎按预期工作,谢谢!!

【问题讨论】:

  • 在哪个操作系统上?如果在 Linux 上,请考虑 ncurses... 另请参阅 poll(2)。请编辑您的问题和标签以解释更多。
  • 什么是“C++中的图形模式”?
  • @PIXEL:C++ 没有“图形模式”,也没有graphics.h。大概你正在使用一些图书馆,那么。你试过#include "solution_for_my_problem.h"吗?

标签: c++ input


【解决方案1】:

使用 int _kbhit( void ); :这是对 getch() 的非阻塞调用(仅适用于 Windows)。 它也包含在conio.h

文档在这里:http://msdn.microsoft.com/en-US/en-en/library/58w7c94c.aspx

(对于 *nix 系统还有一个解决方法:http://cboard.cprogramming.com/c-programming/63166-kbhit-linux.html

【讨论】:

  • 嗯? _kbhit 绝对没有任何“ISO”。前导下划线和conio.h 都是线索,Linux 下需要“解决方法”。
  • 对不起,我刚刚从这个页面复制了:msdn.microsoft.com/en-US/en-en/library/ms235390.aspx。根据 MSDN,它符合 ISO 标准。
  • *耸耸肩* 也许他们的意思是它可以以一致的方式实现;我不知道。但是 grep _kbhit 的 C++ 标准,你会发现它不存在。如果是这样,它将更多在 Linux 上可用,而不是更少。 conio.h 不是标准标头。它是 Microsoft 标头。
  • @LightnessRacesinOrbit :刚刚浏览了 ISO:2003 并且没有提到任何键盘甚至系统输入。我不知道 MS doc 的作者从哪里拿出了这个。
  • 他可能指的是添加下划线以符合标准的“实现保留名称具有前导下划线”规则,但这有点牵强。
猜你喜欢
  • 2014-12-14
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
相关资源
最近更新 更多