我目前正在编写一个 ncurses shell,为了读取输入,逐字符读取输入很重要,因此我使用了 mvwgetch
命令。并在逐个字符读取时递增计数器。问题是每当我按下箭头键或退格键时,它们的输出就会被打印出来。因此,如果我按下退格键,^?
就会被打印出来。
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 不是退格键——7 是铃声。你想要 8。你也可以检查 KEY_BACKSPACE。
你提到不使用 noecho()
,但这正是你必须做的来抑制特殊字符的输出。然后您可以显式addch()
您想要出现的字符(可打印字符)。
我是一名优秀的程序员,十分优秀!