Why does printf not flush after the call unless a newline is in the format string?

c, flush, printf

Solution

The `stdout` stream is line buffered by default, so will only display what's in the buffer after it reaches a newline (or when it's told to). You have a few options to print immediately:

Print to `stderr`instead using `fprintf` (`stderr` is unbuffered by default):

fprintf(stderr, "I will be printed immediately");

Flush `stdout` whenever you need it to using `fflush`:

printf("Buffered, will be flushed");
fflush(stdout); // Will now print everything in the stdout buffer

Disable buffering on stdout by using `setbuf`:

setbuf(stdout, NULL);

Or use the more flexible `setvbuf`:

setvbuf(stdout, NULL, _IONBF, 0); 

Problem

Why does `printf` not flush after the call unless a newline is in the format string? Is this POSIX behavior? How might I have `printf` immediately flush every time?

Original source

Related problems