当我读到一本关于linux编程的书时,我就想到了这一点,我在电脑上试了一下,代码运行得很好,但我就是不明白它是怎么工作的,希望有人能帮我解释一下,提前谢谢!
我的代码如下:

#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;
}

最佳答案

无论缓冲区设置如何,ungetc必须始终能够将一个字符推回到输入流中。如果尝试推送多个字符,ungetc可能会失败。(您应该检查返回值是否失败。)
保证了一个后推特性。如果在同一流上调用ungetc函数的次数过多,而没有对该流执行中间的读取或文件定位操作,则该操作可能会失败。(§7.21.7.10/第。三)
因此,即使没有输入缓冲区,单个ungetc也是有效的。

10-08 06:51