C ncurses KEY_BACKSPACE不起作用

时间:2014-11-29 08:59:42

标签: c ncurses

我试图使用护士库来处理这段代码。每当我按退格键时,我都会尝试打印字母i,但它似乎没有工作。看起来很简单。它应该工作,但它不是。我错过了什么吗?提前致谢

#include <ncurses.h>
#include <stdio.h>

int main () {

  short ch;
  initscr();
  keypad(stdscr, TRUE);
  clear();
  noecho();
  ch = getch();

  while(ch != '\n') {
    if(ch == KEY_BACKSPACE) {
      mvaddch(90, 90, 'i');
    }
    ch = getch();
  }

  endwin();
}

3 个答案:

答案 0 :(得分:2)

用于NCurses的健壮键盘处理程序至少捕获三个潜在值:

short ch = getch();
...
switch (ch) {
...
case KEY_BACKSPACE:
case 127:
case '\b':
  /* Handle backspace here. */
  break;
...
}

原因是退格键可以导致不同的返回值。这取决于平台,终端和当前设置。

答案 1 :(得分:1)

我遇到了一些像你这样的问题并且做了一个小程序来输出组合键的代码,因此暂时解决问题。

#include <stdio.h>
#include <ncurses.h>
#include <locale.h>
#include <wchar.h>

int main()
{
    setlocale(LC_CTYPE, ""); initscr(); raw(); noecho(); keypad(stdscr, TRUE);
    wint_t c;
    get_wch(&c);
    endwin();
    printf("Keycode: %d\n", c);
    return 0;
}

它在我的计算机上为退格输出127。我只是在我的程序中的某处添加一个#define ALT_BACKSPACE 127,我就读了。

答案 2 :(得分:0)

实际上,getch()返回int,但不返回short或char。尝试使用int代替char,因为KEY_BACKSPACE由1个以上的字节组成。

此外,为什么不考虑使用wgetch(window)而不是getch():

int ch;
ch = wgetch(<here put your window handler>)

在这种情况下,也可以将int或uint32_t用作ch而不是short int,因为wgetch()返回的BACKSPACE键代码(KEY_BACKSPACE)也可以使用最多4个字节。