2

我决定在 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 ");

但是,如果我想使用 enter Ctrl+E打印'A Ctrl was hold with a key'。我该怎么做呢?

4

1 回答 1

1

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

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

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

您可能需要对getch()from进行一些翻译工作<curses.h>——它会为功能键和其他特殊按键返回有趣的值,并且可能不会返回您对控制键的期望值。

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

于 2013-09-04T05:52:51.657 回答