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?