一個相關的問題是here,但我的問題是不同的。getchar()和stdin
但是,我想了解更多關於getchar()和stdin的內部信息。我知道getchar()只是最終調用fgetc(stdin)。
我的問題是關於緩衝,stdin和getchar()行爲。鑑於經典ķ& R實施例:
#include <stdio.h>
main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
在我看來,那的getchar()的行爲可以被描述如下:
如果沒有什麼的標準輸入緩衝區,讓OS接受用戶輸入直到按下[enter]。然後返回緩衝區中的第一個字符。
假設程序運行並且用戶輸入「鳳尾魚」。
因此,在上面的代碼清單中,第一次調用getchar()會等待用戶輸入,並將緩衝區中的第一個字符賦給變量c。在循環內部,第一次迭代對getchar()的調用說:「嘿,緩衝區中有東西,返回緩衝區中的下一個字符。」但while循環的第N次迭代導致getchar()說:「嘿,緩衝區中沒有任何東西,所以讓stdin收集用戶輸入的內容。」
我花了一點時間用c源代碼,但它看來這是比較標準輸入,而不是龜etc()的行爲神器。
我錯了嗎?感謝您的見解。
我非常懷疑「經典的K&R例子」有'fflush(stdin)'未定義的行爲!我現在無法檢查...... – pmg
@pmg:你說得對,我糾正了這個例子。 – schot
謝謝,我必須粘貼一個骯髒的例子,其中包含一些來自我的實驗的碎石。 – ybakos