使用退格与ncurses
问题描述:
我有一个简单的ncurses程序设置,每次读取一个字符与getch()并将它们复制到一个缓冲区。我遇到的问题是检测退格键的按下。下面是相关代码:使用退格与ncurses
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();
}
但尝试运行这段代码时,这是试图从行删除字符后,屏幕上出现的“这是一个测试”:
this is a test^?^?^?
和buffer
内容是:
this is a test
用GDB我知道,if语句检查删除/退格被调用,那么还有什么要我做,这样我可以删除茶racters?
答
看起来像^?
是当你输入一个DEL字符时回显到屏幕上的东西。
你可能会调用delch()
两次,但你必须弄清楚哪些字符回显为双字符(或更多)序列。
你最好打赌的可能是打电话给noecho()
,并自己明确地打印字符。
+0
完美的工作,它实际上使我的代码更清洁一些。另外,我必须将'i'减2,因为在检查退格前我会增加它。谢谢! :) – Jumhyn 2012-07-08 23:57:55
“这是测试^?^?^?'缓冲区的内容,还是它出现在屏幕上?无论哪种方式,另一方面呢? – 2012-07-08 23:37:55
'这是一个测试^?^?^?'是什么出现在终端上,缓冲区包含'这是一个测试'。 – Jumhyn 2012-07-08 23:40:14