0

想知道如何测试保存在 char 数组中的输入,例如...

   char input[INPUT_SIZE];

并使用

fgets(input,INPUT_SIZE,stdin);

要从用户那里获取输入,但想知道如何使用 if 语句来测试用户输入是否是例如 ctrl+d或 any ctrl+ anykey?

我尝试使用这样的 ascci 值.. 是测试 ctrl d 的示例

  if(result = 'EOT') {printf("EOT");}

结果也是一个字符数组。

4

1 回答 1

1

您只能在 read 返回时测试Ctrl+ ,请参阅您的 read 手册以获取更多信息,但通常它返回 0。+也是如此,因为两者都向您的程序发送信号。dEOFCtrlc

对于其他Ctrl+ 键组合,它在很大程度上取决于您的系统。

在 shell 或 emacs 中的 linux Ctrl+aCtrl+e将分别将您移动到行的开头或结尾/开头。

最容易获得您想要的内容是使用读取、无缓冲(请参阅ioctl)和 8 字节缓冲区编写一个小程序,并在每次退出读取时转储读取的字节。

int nbr;
int i;
char buf[8];

nbr = 42;
while (nbr > 0)
{
  nbr = read(0, buf, 8);
  i = 0;
  while (i < nbr)
    printf("%x ", buf[i++]);
  printf("\n");
}

您将获得ctrl+key 接收序列的十六进制版本。可能以 \ESC 或 \033 (转义字符序列)开头。例如向上箭头键看起来像\033[A

于 2012-03-01T13:19:38.413 回答