2

我正在使用 Linux 上的 ncurses 库用 C 语言编写一个小程序。

我决定使用getch()函数检查我收到的输入,更具体地说,是退格键。

退格ASCII十进制值为127,链接:这里 我决定打印我按下的键的十进制数值,例如:

一个-> 97

一个 -> 65

] -> 93 ...

后者是正确的。

但是,以下值正确:

退格 -> 7(即 BELL)

Supr -> 74(即“J”)

这是测试代码:

#include <curses.h>

int main(int argc, char **argv)
{
  char ch;
  int column,line;
  int s_column,s_line;
  initscr();
  clear();
  noecho();
  raw();
  keypad(stdscr,TRUE);
  printw("Type: \n> ");
  refresh();
  getyx(stdscr,s_line,s_column);
  while((ch=getch())!='\n')
    {
      printw("%d",ch);
      addch(ch);
      refresh();
    }
  endwin();
  return 0;
}

注意:raw()更改为cbreak()会生成相同的输出

输出测试:(注意:我输入:'a','A',(Backspace),(Supr),'J')

Type:
> 97a65A7^G74J74J

我不明白为什么会这样,有人可以解释为什么 Backspace 键输出 7 而不是 127,而 Supr 输出 74,这与 sa 'J' 相同吗?

4

2 回答 2

5

对于特殊功能键,getch()不一定返回 ASCII 字符,它KEY_xxx返回<curses.h>. 在退格的情况下,这是:

#define KEY_BACKSPACE   0407        /* backspace key */

由于您声明chchar而不是int,因此该值0407被截断为07

将声明更改为:

int ch;

然后它会263在您按 Backspace 时显示。 addch()但是,仍然会显示^G,因为它不使用KEY_xxx宏。您需要在代码中处理这些字符。

于 2012-12-31T16:46:00.020 回答
0

我相信“特殊”键正在生成多字符读数,这解释了输出中的 ^ 。

有关更多信息,请参见插入符号

于 2012-12-31T15:55:07.773 回答