2012-07-08 60 views
5

我有一个简单的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?

+0

“这是测试^?^?^?'缓冲区的内容,还是它出现在屏幕上?无论哪种方式,另一方面呢? – 2012-07-08 23:37:55

+0

'这是一个测试^?^?^?'是什么出现在终端上,缓冲区包含'这是一个测试'。 – Jumhyn 2012-07-08 23:40:14

回答

4

看起来像^?是当你输入一个DEL字符时回显到屏幕上的东西。

你可能会调用delch()两次,但你必须弄清楚哪些字符回显为双字符(或更多)序列。

你最好打赌的可能是打电话给noecho(),并自己明确地打印字符。

+0

完美的工作,它实际上使我的代码更清洁一些。另外,我必须将'i'减2,因为在检查退格前我会增加它。谢谢! :) – Jumhyn 2012-07-08 23:57:55