2012-04-02 55 views
3

可能重複:
How is std::iostream buffered?只讀1個字符在C++

這聽起來有些可笑,但我怎麼能可以從cin在C讀取一個字符++(直到進入被按下時,只有一個字符)? 我試過操作符>>,get(),getchar(),但是它們都讀取整行。

+1

您指定的所有方法都從'std :: cin'讀取一個字符。但是,該字符不能從O/S獲得,直到按下ENTER鍵。 – 2012-04-02 18:19:23

+1

你在使用什麼操作系統?正如羅布所說,操作系統持有輸入,直到。要發生鍵盤事件,您需要一個操作系統特定的庫。 – 2012-04-02 18:22:03

+0

@Robᵩ所以你說什麼是不可能只讀一個字符?我所知道的所有其他語言都有這個功能。 – Dave 2012-04-02 18:23:28

回答

3

_getche() function做你想做的。

+2

是的,但他沒有要求可移植性,他在上面的評論中指出他使用Win7。此外,正如亞當Shiemke和羅布指出,要獲得鍵盤事件,你將需要一個操作系統特定的功能。 – 2012-04-02 18:30:22

3

cin是緩衝輸入。你想要「無緩衝」的輸入。它可以在不同平臺上有所不同,除非您直接使用文件。

像這樣的東西可能會有所幫助:

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

[編輯],請記住,使用「緩衝」訴「無緩衝」是一個設計決策,都是合法的。 cin上的「緩衝輸入」的「默認值」很有意義,因爲用戶將「退格」以修正輸入行,並且不希望那種「混亂」給節目提供食物。 (而且,一般來說,像文件一樣的「緩衝輸入」可以更有效率。)

2

雖然這是操作系統特定的,在類UNIX操作系統,您可以使用termios的界面到終端上禁用輸入緩衝,將其置於非規範方式:

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

詳情請參閱termios(3)