为什么输出的执行顺序不符合预期

问题描述

我正在学习 c 语言,但在教程中遇到了一些代码,如下所示。

#include <stdio.h>
 
int main() {
    fprintf(stdout,"This is to stdout. ");
    fprintf(stderr,"This is to stderr. ");
    fprintf(stdout,"This is also to stdout. ");
}

他们得到的结果是

This is to stderr. This is to stdout. This is also to stdout. 

这是乱序 但我得到的是

This is to stdout. This is to stderr. This is also to stdout.

这是有序的。 所以这太奇怪了,为什么我得到了不同的结果? (我指的 tut 是 https://www.journaldev.com/39049/fflush-in-c

解决方法

也许在您的实现中,stdout无缓冲。检查您的文档。

您可能想尝试 setvbuf()stdout 恢复为 line-buffered:例如,在 {{1 的开头使用 setvbuf(stdout,_IOLBF,1000); }} 在任何其他使用 main() 之前。


通常 stdout行缓冲,而 stdout无缓冲

unbuffered :一旦数据可用,操作系统就会将数据从流发送到设备。

行缓冲:当达到换行符(或限制)时,数据被发送到设备。

完全缓冲:当缓冲区已满时,数据被发送到设备。

stderr