1. ホーム
  2. c++

[解決済み】Enterキーを待たずに標準入力から文字をキャプチャする方法

2022-04-10 08:36:39

質問

あまりに頻繁に出てくるので、どうやったか思い出せません。しかし、CまたはC++で、改行を待たずに標準入力から文字を読み取る(エンターキーを押す)最良の方法は何でしょうか。

また、入力された文字を画面にエコーしないことが理想です。コンソール画面に影響を与えずにキーストロークをキャプチャしたいだけなのです。

解決方法は?

これは、ピュアC++ではポータブルな方法では不可能です。なぜなら、使用するターミナルが stdin (それらは通常ラインバッファリングされています)。しかし、そのためのライブラリを使用することは可能です。

  1. Windowsコンパイラで利用可能なconio。Windowsコンパイラで使用できる _getch() 関数を使うと、Enterキーを待たずに文字が出ます。私は頻繁にWindowsの開発をしているわけではありませんが、私のクラスメートがただ単に <conio.h> を作成して使用します。参照 conio.h をWikipediaで見ることができます。そこには getch() Visual C++では非推奨とされています。

  2. Linuxで利用可能なcurses。Windowsでも互換性のあるcursesの実装が利用可能です。また getch() 関数を使用します。(試しに man getch をクリックすると、そのマニュアルが表示されます)。参照 呪い をWikipediaで検索してください。

クロスプラットフォームの互換性を目指すのであれば、cursesを使うことをお勧めします。とはいえ、行バッファリングをオフにするための関数があることは確かです(quot;cooked mode"に対して、quot;raw mode"と呼ばれていると思います - 調べてみてください)。 man stty ). 私が間違っていなければ、Cursesはあなたのためにポータブルな方法でそれを処理します。