当我关闭stdin的缓冲区并ungetc到stdin时会发生什么

what happend when I close the buffer of stdin and ungetc to stdin?

本文关键字:stdin 什么 ungetc 缓冲区      更新时间:2023-10-16

当我在读一本关于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可能会失败。(您应该检查返回值是否失败。)

保证一个字符的pushback。如果在同一流上调用ungetc函数多次而没有在该流上进行中间的读取或文件定位操作,则操作可能会失败。(教派;7.21.7.10/帕拉。3)

所以一个ungetc是有效的,即使没有输入缓冲区