2012-07-08 75 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