Very often I get into C code where printf format strings start with \n:

printf( "\nHello" );

This in my opinion is an annoying thing that offers no advantages (rather many disadvantages!) with respect to printing "Hello\n":

If the first printed line begins with '\n', program output will begin with a (useless) empty line

If the last printed line doesn't end with '\n', program output won't end with a new line (useful when reading the output on a terminal)

On most terminals (on line buffered streams in general), output gets flushed when a '\n' is encountered, so a line not ending with '\n' could be shown on screen much time after it's been actually printf'd (or maybe never, if the stream never gets flushed, for instance if the program crashes)

3 Answers
3

Generally, it is done to ensure that the statement is printed on the next line. If it is done at the end of the line, the same effect can be derived. It really is of little consequence.

Update: As long as you pick one way and stick with it, it really is not going to matter one bit. If you are really concerned then type all your statements as "\nHello\n". If you do have some lines mashing together, then this is really not that hard of a "bug" to fix. Just go back and change the offending statement.

The difference is if you put it at the start of the line you guarantee that it will print out on a new line. If you're working on a big codebase there may be a line printing out before yours that doesn't have a newline being appended to it.
–
Robert Anton ReeseJun 28 '11 at 15:37

This is particularly true if you are sticking in print statements for debugging purposes.
–
Peter RowellJun 28 '11 at 15:47

1

Ok, but in this way a new message ("Hello2\n") could end up on the same line of your last one (ending up in "\nHelloHello2\n"): isn't this as bad as having your message on the same line of the previous one (eg: "\nPrevious-messageHello\n")? If these two scenarios are bad in the same way, a programmer/project should adopt a standard (eg: always putting '\n' at the beginning, or at the end), but I can't see what advantages you could have by putting '\n' at the beginning of your messages...
–
peoroJun 29 '11 at 0:21

Two words: personal preference. In the grand scheme of things, I don't think this really matters. If you're annoyed by it, ask the author of this code why they write it like that. You may get some interesting answers.

+1 - It is all preference. I prefer my newline at the end of the string as well because it seems more natural to me
–
JettiJun 28 '11 at 15:29

Personally, when I have enough output for this to matter, I try to keep all of the actual printfs, couts and newlines in a single function (perhaps up in main()) so I can prevent any silly bugs related to missing/extra newlines. But maybe I'm just OCD about them.
–
Ixrec2 days ago

there is, the C99 standard says that an interactive stream (eg stdout) will not be fully buffered, which means \n will cause a flush. If you redirect it to a file, then you'll get different behaviour.
–
gbjbaanbJun 28 '11 at 16:48

1

Actually, most terminals (even in C++03 and C89) do use line buffering, which means the '\n' character is special.
–
Billy ONealJun 28 '11 at 17:46

2

Shouldn't this be a comment, not an answer?
–
WipqoznJun 28 '11 at 18:19