我目前正在编写一个ncurses shell,为了读取输入,逐字读取它非常重要,因此我使用mvwgetch命令。并在计数器逐字读取时递增计数器。问题是,每当我按下箭头键或退格键时,它们的输出就会被打印出来。例如,如果我按backspace键,^?将被打印。

while ((command[i] = mvwgetch(promptwin, promptline, posx)) != '\n') {
    if (command[i] == 7) { // if entered character is a backspace
        i =-2;
        posx =- 2;
        mvwdelch(promptwin, promptline, posx);
        mvwdelch(promptwin, promptline, posx - 1);
        command[i] = '\0';
    } else {
        posx++;
        posyx[1] = posx;
        wmove(promptwin, promptline, posx);
    }
    i++;
}

为了跟踪光标在屏幕上的位置,需要读取字符。在我的代码中,我试图解决这个问题,但它仍然显示这些字符。PS:在linux上工作。

最佳答案

首先,7不是backspace——7是bell。你想要8个。您也可以检查键的退格。
您提到不使用noecho(),但这正是禁止特殊字符输出所必须做的。然后可以显式地addch()要显示的字符(可打印字符)。

10-06 09:31