printf除非换行符在格式字符串中,为什么在调用后不刷新?这是POSIX的行为吗?我怎么可能printf每次都立即冲洗?
因此,谷歌快速搜索fflush(stdin)清除输入缓冲区会发现许多网站警告不要使用它.然而,这正是我的CS教授教授课程的原因.
使用有多糟糕fflush(stdin)?即使我的教授正在使用它并且似乎完美无缺地工作,我是否真的应该放弃使用它?
我只是好奇应该满足哪些条件自动刷新stdout缓冲区.
首先,我很困惑这个伪代码不会在每次迭代时打印输出:
while (1) {
printf("Any text");
sleep(1);
}
Run Code Online (Sandbox Code Playgroud)
但如果我添加换行符,它会.
经过几次实验,我发现在我的机器上stdout缓冲区被刷新:
第一个条件是完全清楚的 - 当缓冲区已满时,应该刷新它.第二个也是合理的.但为什么换行符导致潮红?其他隐含的条件是什么?