【问题标题】:Which keyboard characters can be read with getchar() on Linux在 Linux 上使用 getchar() 可以读取哪些键盘字符
【发布时间】:2018-04-26 08:23:47
【问题描述】:

我有一个在 Ubuntu 上运行的 C++ 应用程序,它使用 getchar() 函数等待按键。没有使用输入,我只是用任何按键结束我的程序。

我注意到我基本上可以输入任何printable 字符,但也可以输入一些unprintable 字符,例如escapebackspace 键。没有触发我的程序结束的键是 shiftctrl 之类的键。

所以我的问题是,getchar() 会读取哪些按键?我如何对它们进行分类,因为显然不仅可打印字符触发 getchar()?

我在手册页或 C++ 参考中找不到答案。

这基本上是我写的所有代码:

std::cout << "Ready for input ..." << std::endl;
std::getchar();
std::cout << "A key was pressed, landing ..." << std::endl;

请注意,我确实操纵 termios 不等待换行符并且不回显。

【问题讨论】:

  • 不都是字符吗?在 Windows 中,它几乎适用于按键。你写过代码吗?
  • 如果你想要一种简单的方法来处理它,请尝试使用 curses 库
  • 我添加了一个代码示例@MasOOd.KamYab。
  • 我没有问我如何处理它@Ôrel,只是 getchar() 是如何工作的。
  • code.woboq.org/userspace/glibc/libio/getchar.c.html getchar() 使用缓冲输入,如果你真的需要,你可以读取原始输入

标签: getchar


【解决方案1】:

所以 getchar() 没有捕获的键是Modifier 键。也许只是因为它们只是“修饰符”并且总是与另一个键一起使用来创建特定的字符。如果有人知道具体原因,我想知道。

【讨论】:

  • 这有点太简单了。 '`' 是修饰键吗?在我的键盘上,答案因我使用的语言而异。当我在编写代码或英语时,答案是否定的。当我使用带有字母 à 的语言时,我使用 ` 作为修饰符。
  • @MSalters 在我看到的参考资料中,修饰键被定义为不会自己触发动作,只是输入一种mode。所以我不认为'`'是修饰键,你通过打字证明了这一点?维基百科显然称它们为dead keys,因为您必须在它们修改下一个键入的字符之前按下并释放它们。
  • 我通过在后面输入一个空格来输入`。所以是的,这是一个字符的两个键。
  • 那么这又是一个“死键”,而不是“修改键”,因为您需要在它们更改下一个字符之前按下并释放它们,而不仅仅是按下。
【解决方案2】:

getcharstdin 读取,而不是直接从键盘读取。您对“键盘字符”的假设暗示了您缺少的一点。这缺少从 key presses 到字符的翻译。例如,按键 Shift+a 会产生Aà 的输入方式取决于 xact 键盘配置。

【讨论】:

  • 我现在看到了不同之处,尽管这并不能回答我的问题。请参阅下面的答案。
猜你喜欢
  • 2019-09-14
  • 2011-07-23
  • 2011-08-04
  • 1970-01-01
  • 2015-06-04
  • 2012-04-19
  • 2010-12-20
相关资源
最近更新 更多