我只是好奇应该满足哪些条件自动刷新stdout缓冲区.
首先,我很困惑这个伪代码不会在每次迭代时打印输出:
while (1) {
printf("Any text");
sleep(1);
}
Run Code Online (Sandbox Code Playgroud)
但如果我添加换行符,它会.
经过几次实验,我发现在我的机器上stdout缓冲区被刷新:
第一个条件是完全清楚的 - 当缓冲区已满时,应该刷新它.第二个也是合理的.但为什么换行符导致潮红?其他隐含的条件是什么?
我无法理解以下代码如何给出不同的输出
#include <stdio.h>
int main()
{
int i=43;
printf("%d\n",printf("%d",printf("%d",i)));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出: 4321
printf("%d\n",printf("%d",printf("%d ",i)));
Run Code Online (Sandbox Code Playgroud)
输出: 43 31
printf("%d\n",printf("%d ",printf("%d ",i)));
Run Code Online (Sandbox Code Playgroud)
输出: 43 3 2
printf("%d\n",printf("%d ",printf(" %d ",i)));
Run Code Online (Sandbox Code Playgroud)
产量 43 4 2
printf("%d\n",printf(" %d ",printf(" %d ",i)));
Run Code Online (Sandbox Code Playgroud)
输出: 43 4 3
和其他变化也给出了其他产出.
如何只是一个空格改变一个数字.
提前致谢.