7

getch()を使用して文字を一度に1つずつ読み取り、それらをバッファーにコピーする単純な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ステートメントが呼び出されていることがわかります。文字を削除できるようにするには、他に何をする必要がありますか?

4

2 に答える 2

6

^?DEL文字を入力すると、画面にエコーされるように見えます。

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

あなたの最善の策は、おそらくnoecho()自分で文字を呼び出して明示的に印刷することです。

于 2012-07-08T23:42:24.313 に答える