By default, stdout is a line-buffered stream, which means you need to clear it explicitly. It is implicitly cleared of a new line. This behavior is provided by the C99 standard.
This means that in the first printf text is added to the internal buffer. This is done to increase efficiency, for example. when printing a large number of small fragments of text.
The second printf contains a new line, and this leads to loss of flow. You can explicitly reset stdout via fflush(stdout); , if you want to.
Alternatively, you can also use the unbuffered stderr, as in fprintf(stderr, "bla bla bla"); , but as its name implies, it is intended for errors and warnings.
See also the SO question. Why is printf not reset after a call, unless a newline is specified in the format string? .
source share