使用带有ncurses的退格键

Jum*_*hyn 5 c ncurses

我有一个简单的ncurses程序设置,它使用getch()一次读取一个字符并将它们复制到缓冲区中.我遇到的问题是检测到按退格键.这是相关代码:

while((buffer[i] = c = getch()) != EOF) {
    ++i;
    if (c == '\n') {
        break;
    }
    else if (c == KEY_BACKSPACE || c == KEY_DC || c == 127) {
        i--;
        delch();
        buffer[i] = 0;
    }
    refresh();
}
Run Code Online (Sandbox Code Playgroud)

但是在尝试运行此代码时,这是在尝试从"这是一个测试"行中删除字符后屏幕上显示的内容:

this is a test^?^?^?
Run Code Online (Sandbox Code Playgroud)

以及的内容buffer是:

this is a test
Run Code Online (Sandbox Code Playgroud)

使用gdb我知道正在调用if语句检查delete/backspace,那么我还应该做什么才能删除字符呢?

Kei*_*son 5

^?当您输入DEL字符时,它看起来就像回显到屏幕上一样.

你可能会调用delch()两次,但是你必须找出哪些字符作为双字符(或更多)序列回显.

您最好的选择可能是打电话noecho()并自己明确打印角色.