2015-10-19 61 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