getch()在linux上捕获Ctrl- * letter *

时间:2013-09-04 05:37:07

标签: c++ linux keystroke ctrl conio

我决定在Linux上使用来自conio.h的getch。我听说不推荐这个,但我现在需要一个解决方案,并在以后努力提高我的编程技巧。

我阅读了很多关于如何输入一个键的教程,程序会做一些事情。如:

printf("Press any key\n");
c = getch();
if (c)
    printf(" A key is pressed from keyboard ");
else
    printf("An error occurred ");

但是,如果我想使用输入 Ctrl + E 来打印'使用键保持一个Ctrl'。我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

getch()是Windows #include <conio.h>或Unix #include <curses.h>中的函数。你的意思是打电话给其中一个?它不是C标准中定义的函数(标准函数当然是getc()getchar())。如果您使用<curses.h>中的函数,则需要先进行一些初始化,然后再进行终结。

假设您解决了计划调用哪个函数的问题,那么您会发现控制字符为数字1..26:

  • Control-A = 1
  • Control-Z = 26

您可能需要对来自getch()的{​​{1}}进行一些翻译工作 - 它会返回功能键和其他特殊键击的有趣值,并且可能无法返回您对控制键的期望。

此外,您的终端驱动程序可能会为您解释各种字符而感到困惑(特别是如果您使用<curses.h>getchar())。例如, Control-D 可能会被视为EOF; Control-H 可能是退格或擦除; Control-C 可能是中断;和 Control-Z 很可能是'暂停'(意思是'在没有退出当前程序的情况下返回shell - 只需暂停它')。其他控制键具有其他含义。例如,通过键入 Control-V Control-Z,您可以获得“真正的”含义 - 使用 Control-V 来抑制下一个字符的特殊含义。