2013-04-25 20 views
1

所以,我在Visual Studio 2012 Ultimate中使用getchar得到了一些奇怪的結果。這是我可以想出的最簡單的例子,以表明它不是代碼錯誤,並且是其他操作。getchar()沒有像它應該那樣行事?

#include <cstdio> 

int main(int argc, char* argv[]) { 
    char c = getchar(); 
    putchar(c); 
    return 0; 
} 

但是,結果出現(視覺上)有點像iostream庫中的'cin'。 getchar返回一個字符,因爲它應該(第一個),但是當我按下按鍵時,它會在屏幕上顯示字符,並且在我按下回車鍵之前不會返回。我搜索了一下,並且無法真正發現這種情況發生的任何其他情況,是否有人有任何線索知道這裏發生了什麼?

回答

1

標準輸入通常是行緩衝的。這意味着系統將在您輸入完整的文本行之前,在輸入緩衝區中輸入字符時讀取和存儲字符。 getchar()函數從該輸入緩衝區中讀取字符。

對於大多數用途而言,一次只讀完整行代碼更有意義,然後在閱讀完成後再處理該行。

有辦法立即輸入一個字符在一個時間,但他們是系統特定的(有點醜陋)。 comp.lang.c FAQ中的問題19.1對此進行了討論。

+0

這很好回答它。謝謝。 – 2013-04-25 01:24:47

1

輸入是行緩衝的,所以getchar只會輸入一個字符,至少輸入一行輸入。如果你不結束這一行,而是在Linux上關閉輸入^D,我猜在Windows上^Z,那麼你會看到它也會打印第一個字符。

相關問題