2010-11-22 8 views
3

私は今のncurses /呪いをしようとしていますgetchは-1を返しますか?

...彼らはそれらのキーのために何も返さないようF11やinsand getchrなどのキーをキャプチャする方法を尋ね、と私はそれが入力イベントからの生の入力を受け付ける作業見つけることができるものは何もありませんC++プログラムでこれらのキーを取得します。

テストへの私のプログラムは、それは基本的に、簡単です:

#include <stdlib.h> 
#include <stdio.h> 
#include <curses.h> 
int main() { 
    int car; 
    while(c != '\b') { 
     c = getch(); 
     printf("%i", c); 
    } 
    return 0; 
} 

私はもちろん、他のgetchは()関数と同じように、それを使用しますが、それは-1無限の時間を返します..私は最近のカーネルを使用していますArch linuxの標準端末(xtermでテスト済み)

このgetch()をライブラリで使用するには、スイッチを入れる必要があるスイッチはありますか?

答えて

7

getch()を呼び出す前に、cursesを初期化するにはinitscr();に電話する必要があります。

さらに、ラインバッファなしモードが必要な場合もありますので、cbreak(); noecho();(エコーモードはcbreakモードでは使用しないでください)も呼び出す必要があります。

+0

私はcursesのエキスパートではありませんが、 'keypad(stdscr、TRUE);'を呼び出すと、ncursesが特別なキーのエスケープシーケンスを変換し、 'getch()'から* KEY_ *マクロ。例えば'if(getch()== KEY_F0 + 11){/ * f11 pressed * /}' –

+0

ありがとうございます。私のFNキーは何らかの理由でLinux上で動作しないので、それらをテストすることはできませんが、挿入やその他のような奇妙なものではうまくいきます。カーネルから生のキーボード入力をマップしてfn +キーと物事を一時停止するには:\ – John

関連する問題