2012-07-08 6 views
5

私はgetch()で文字を一度に読み込んでバッファにコピーする簡単なncursesプログラムの設定をしています。私が抱えている問題は、バックスペースキーの押下を検出していることです。ここに関連するコードは次のとおりです。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の内容は以下のとおりです。GDBと

this is a test 

私は削除/バックスペースをチェックするif文は、私は茶を削除できるように、私は他に何をやるべき、と呼ばれていることを知っていますラクター?

+0

'これはテストですか?'^'は' buffer'の内容ですか、それとも画面に表示されますか?いずれにせよ、他のものは何ですか? –

+0

'これはテストですか?^ ^?^?'は端末に表示されるものです。バッファには 'これはテストです'が含まれています。 – Jumhyn

答えて

4

^?は、DEL文字を入力すると画面にエコーされる内容です。

おそらくdelch()を2回呼び出すことができますが、次に2文字(またはそれ以上)のシーケンスとしてエコーする文字を特定する必要があります。

おそらくnoecho()に電話して、明示的に文字を印刷するのが最もよい方法です。

+0

これは完全に機能し、実際には自分のコードを少しきれいにしました。さらに、私はバックスペースをチェックする前にインクリメントしているので、 'i'を2減らす必要がありました。ありがとう! :) – Jumhyn

関連する問題