0

getch()の関数を使用して、Windows でコードを作成しましたstdio。問題は、Enter キーを押す必要のない入力機能を使用する必要があることです。

私のコードはコンパイルされ、Windows 上で完全に動作します。ただし、この割り当ては Linux で実行する必要があり、実行しようとすると、認識されないgetch()(または_getch()) と表示されます。問題は、割り当てによると、他のインクルードを使用できないことですがstdio.h(フラグを追加する場合も同様です)、これcurses.hを解決するために使用することはできません。

私も使えないtermios.hなど、習っていません。どうすればこれを解決できますか? 他のオプションはありますか?

ありがとう

4

2 に答える 2

2

UNIX でのライブラリ アプローチは、私たちにとってはncursesですが、セットアップが簡単ではないフレームワークです。非ライブラリ モードは、ファイル記述子を使用して、標準入力ストリームを非正規入力モードに変換することです。メモリから必要なコードを入力すると (つまり、今はテストできず、おそらく重要なことを忘れていた可能性があります)、対応するコードは次のようになります。tcgetattr()tcsetattr()0

struct termios setings;
tcgetattr(0, &settings);
settings.c_lflags &= ~ICANON;
tcsetattr(0, &settings);

明らかに、実際の実装では、システム コールが実際に成功することが検証されます。このコードの後、キーを押すとすぐに反応するstd::cinことに注意してください。stdin直接的な結果として、あらゆる種類の「おかしな」文字が通過します。たとえば、削除キーを使用すると、バックスペース文字 (ctrl-H、char(7)) が表示されます。

于 2013-11-16T20:39:39.387 に答える
1

Linux で奇跡を起こすことはありません。以外のものを使用するかstdio.h、同等のものを使用せずgetchにEnterキーを押すことに依存します。

于 2013-11-16T20:38:31.487 に答える