2012-04-02 4 views
3

可能性の重複:
How is std::iostream buffered?はcのみ1つの文字を読ん++

これはばかげて聞こえるかもしれないが、どのようにすることができます、私はCにCINから1つの文字を読み++(NOT押下するまでは、ただ1文字)? 私は演算子>>、get()、getchar()を試しましたが、それらのすべてが行全体を読み込みます。

+1

指定するすべてのメソッドは、 'std :: cin'から1文字読み込みます。ただし、ENTERを押すまでは、その文字はO/Sから使用できません。 –

+1

あなたはどのOSを使用していますか? Robが言ったように、OSはまで入力を保持します。キーボードイベントが発生した場合、OS固有のライブラリが必要です。 –

+0

@Robᵩそう言えば、1つの文字だけを読むことはできません。私が知っている他のすべての言語にはその機能があります。 – Dave

答えて

3

_getche() functionはあなたが望むことをします。

+2

はい、しかし、彼は移植性を求めていない、彼は彼がWin7を使用している彼のコメントで述べている。また、Adam ShiemkeとRobが指摘しているように、キーボードイベントを取得するには、OS固有の機能が必要です。 –

3

cinは、バッファされた入力です。あなたは、 "unbuffered"入力が必要です。ファイルを直接使用しない限り、プラットフォームによって異なる場合があります。このような

何かが役立つかもしれません:。

http://www.cplusplus.com/forum/beginner/3329/

[EDIT]、 "バッファリング" Vの使用を忘れないでください "アンバッファードは、" 設計上の決定である、との両方が正当です。 cinの "buffered-input"の "default"は、ユーザが入力ラインを修正するために "バックスペース"して、プログラムに与える "混乱"を避けたいので、非常に意味があります。 (そして、一般に、ファイルのような "バッファされた入力"はずっと効率的です。)

2

これは、あなたが非標準モードでそれを置くことによって、端末上の入力バッファリングを無効にするには、termiosインタフェースを使用することができますUNIXライクなオペレーティングシステムでは、OS固有のですが:

termios t; 
tcgetattr(STDIN_FILENO, &t); 
t.c_lflag &= ~ICANON; 
tcsetattr(STDIN_FILENO, TCSANOW, &t); 

詳細はtermios(3)を参照してください。 。

関連する問題