No, printf does not flush when \n is encountered, unless you specify it with setvbuf(stdout, NULL, _IOLBF, 0);
And data files don't generally end with a newline.
POSIX buffers aren't generally flushed until fflush or fclose is called (or when the buffer is full). fclose is automatically called on exit(), which is why explicit flushing isn't usually needed. Note that this requires stdio to maintain a global list of open files, which is something that the Zig stdlib doesn't do for numerous good reasons.