如何获取键盘按键值(或数字/代码)
C++ How to get keyboard key press value (or number/code)
我想知道用户按了哪个键
我知道有cin()
或getline(cin, var)
,但我不想输入,我想获得键的编号(索引,或称为代码?)。
例如,我想知道用户是否按了F1
或F10
或Enter或Escape,然后做一些正确的事情。
if(user_has_pressed_escape)
{
exit_the_console();
}
这可以通过操作系统自己的API获得。不同的操作系统有不同的api(例如android根本没有F10键)。
通常你会使用第三方库来包装API,这样你就可以独立于操作系统进行编码。当涉及到第三方库时,有很多选择:SDL, QT
, wxWidgets
, GTK
等等。
这些库隐藏了与特定操作系统API的交互,并允许您编写一次代码并在许多类型的系统上运行。但是要了解它是如何工作的,你可以看看每个操作系统的文档。
例如在Windows上GetKeyboardState或PeekMessage
在Linux X11: XQueryKeymap或通过XPeekEvent
您可以使用ASCII表轻松获取ESC键的事件https://en.wikipedia.org/wiki/ASCII
if (27 == getchar()) // 27 is for ESC
{
//do something
}
功能键(F1, F2,…)取决于您的操作系统。
根据http://pdcurses.sourceforge.net/doc/PDCurses.txt上的"PDCurses用户指南"的"INPUT VALUES"部分,如果键盘已启用,则可以使用getch功能来检测此类键。
以下是相关的关键代码。
KEY_F0 function keys; space for 64 keys is reserved
KEY_F(n) (KEY_F0+(n))
KEY_EXIT Exit key
PDCurses库具有跨平台的优点。
c++作为C的祖先是强系统独立的,所以没有办法只使用语言本身,甚至是STL库来做你想做的事情。您将不得不在不同的平台上使用不同的库。通常,这只与操作系统相关,因为大多数操作系统实际上都在使用中断机制寻找键盘动作,比如按下。所以你的程序必须与操作系统进行强交互。
- 如何修复我的最大公约数代码?它适用于除零和零以外的所有数字
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 无法理解代码背后的逻辑,这是在两个给定数字之间生成素数的优化问题
- 有人可以解释我这个代码吗?它给出与我们输入的数字相反
- 我怎么不能按课程代码的降序对数字进行排序
- 为什么当我在 c++ 中运行函数时,我的代码显示数字 53
- 代码以查找数组中的最大数字,但它仅将第一个数字显示为最大数字. 有人请告诉我为什么
- 为什么这个代码不适用于大数字
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 下面的代码是如何工作的?它输出分解的数字并且功能齐全,我只是不明白它是如何做到的
- Cpp代码故障(显示意外数字)
- 如何让我的代码显示文件名不正确或文件中数字的平均值?
- 试图找到一个数字的平方根,但代码不起作用。C++
- 上一个较大的数字代码中的输出不正确
- 相同的数字代码返回不同的输出,无论是 C++ 还是 C
- visual c++中,没有编译器优化的数字代码会给出错误的结果
- C++字母等效数字代码的睡眠时间
- C++字母等效数字代码输出程序
- 如何获取键盘按键值(或数字/代码)