除非换行符在格式字符串中,否则为什么在调用后printf不会刷新?
除非换行符在格式字符串中,否则为什么在调用后 printf 不会刷新? 这是POSIX行为吗? 每次如何立即使 printf 刷新? #1楼 stdout已缓冲,因此仅在换行符输出后输出。 要立即获得输出,请执行以下任一操作: 打印到stderr。 使stdout无缓冲。 #2楼 要立即刷新,请调用 f flush (stdout) 或 fflush(NULL) ( NULL 表示刷新所有内容)。 #3楼 您可以使用fprintf到没有缓冲的stderr。 或者,您可以在需要时刷新标准输出。 或者,您可以将stdout设置为unbuffered。 #4楼 默认情况下, stdout 流是行缓冲的,因此仅在到达换行符后(或被告知时)才显示缓冲区中的内容。 您有几种选择可以立即打印: 打印到 stderr 而不是使用 fprintf ( 默认情况下 stderr 是未 缓冲的 ): fprintf(stderr, "I will be printed immediately"); 在需要使用 fflush 时冲洗stdout: printf("Buffered, will be flushed"); fflush(stdout); // Will now print everything in the stdout buffer 编辑 :从下面的安迪·罗斯的评论,您还可以通过使用