2015-10-19 45 views
0

它進入了我的腦海裏,當我在Linux上閱讀有關編程的一本書,我試了一下我的電腦上,代碼工作正常,但我就是不明白它是如何工作那樣,希望有人可以幫我解釋一下,提前致謝! 我的代碼如下:當我關閉標準輸入的緩衝和對ungetc函數標準輸入發生了什麼?

#include <iostream> 
#include <cstdio> 

using namespace std; 

int main() { 
    setbuf(stdin, NULL); 
    unsigned char ch = 'a'; 
    unsigned char pch = ungetc(ch, stdin); 
    char c = getchar(); 
    putchar(c); 
    return 0; 
} 
+2

如果這是C++你爲什麼不使用'ifstream'和'cin'操作? –

+0

是的,這是C++風格這是我很熟悉,我只是想驗證輸入流的'ungetc'功能和緩衝區。 – kuixiong

回答

1

無論緩衝區設置,ungetc必須始終能夠推一個字符返回到輸入流。如果您嘗試推送多個字符,則ungetc可能會失敗。 (您應該檢查失敗的返回值。)

保證推回的一個字符。如果在同一個流上調用ungetc函數的次數太多而沒有對該流進行中間讀取或文件定位操作,則操作可能會失敗。 (§ 7.21.7.10/para 3)

所以單個ungetc是有效的,即使沒有輸入緩衝器。

+0

從你說什麼,我的愚見,'ungetc'可以將文字輸入一個特殊的緩衝區,每一次標準輸入流想要得到一個角色,它首先從speicial緩衝區中讀取,然後從正常緩衝區,我已經設置爲NULL,我說得對嗎? – kuixiong

+0

@kuixiong:如果你考慮一個'char'是一個緩衝,這恰恰是正確的。 – rici