Difference between \n and \r?

前端 未结 10 696
予麋鹿
予麋鹿 2020-11-21 11:17

What’s the difference between \\n (newline) and \\r (carriage return)?

In particular, are there any practical differences between

相关标签:
10条回答
  • 2020-11-21 12:01

    In windows, the \n moves to the beginning of the next line. The \r moves to the beginning of the current line, without moving to the next line. I have used \r in my own console apps where I am testing out some code and I don't want to see text scrolling up my screen, so rather than use \n after printing out some text, of say, a frame rate (FPS), I will printf("%-10d\r", fps); This will return the cursor to the beginning of the line without moving down to the next line and allow me to have other information on the screen that doesn't get scrolled off while the framerate constantly updates on the same line (the %-10 makes certain the output is at least 10 characters, left justified so it ends up padded by spaces, overwriting any old values for that line). It's quite handy for stuff like this, usually when I have debugging stuff output to my console screen.

    A little history

    The /r stands for "return" or "carriage return" which owes it's history to the typewriter. A carriage return moved your carriage all the way to the right so you were typing at the start of the line.

    The /n stands for "new line", again, from typewriter days you moved down to a new line. Not nessecarily to the start of it though, which is why some OSes adopted the need for both a /r return followed by a /n newline, as that was the order a typewriter did it in. It also explains the old 8bit computers that used to have "Return" rather than "Enter", from "carriage return", which was familiar.

    0 讨论(0)
  • 2020-11-21 12:10

    Two different characters.

    \n is used as an end-of-line terminator in Unix text files

    \r Was historically (pre-OS X) used as an end-of-line terminator in Mac text files

    \r\n (ie both) are used to terminate lines in Windows and DOS text files.

    0 讨论(0)
  • 2020-11-21 12:10

    To complete,

    In a shell (bash) script, you can use \r to send cursor, in front on line and, of course \n to put cursor on a new line.

    For example, try :

    echo -en "AA--AA" ; echo -en "BB" ; echo -en "\rBB"
    
    • The first "echo" display AA--AA
    • The second : AA--AABB
    • The last : BB--AABB

    But don't forget to use -en as parameters.

    0 讨论(0)
  • 2020-11-21 12:13

    In terms of ascii code, it's 3 -- since they're 10 and 13 respectively;-).

    But seriously, there are many:

    • in Unix and all Unix-like systems, \n is the code for end-of-line, \r means nothing special
    • as a consequence, in C and most languages that somehow copy it (even remotely), \n is the standard escape sequence for end of line (translated to/from OS-specific sequences as needed)
    • in old Mac systems (pre-OS X), \r was the code for end-of-line instead
    • in Windows (and many old OSs), the code for end of line is 2 characters, \r\n, in this order
    • as a (surprising;-) consequence (harking back to OSs much older than Windows), \r\n is the standard line-termination for text formats on the Internet
    • for electromechanical teletype-like "terminals", \r commands the carriage to go back leftwards until it hits the leftmost stop (a slow operation), \n commands the roller to roll up one line (a much faster operation) -- that's the reason you always have \r before \n, so that the roller can move while the carriage is still going leftwards!-) Wikipedia has a more detailed explanation.
    • for character-mode terminals (typically emulating even-older printing ones as above), in raw mode, \r and \n act similarly (except both in terms of the cursor, as there is no carriage or roller;-)

    In practice, in the modern context of writing to a text file, you should always use \n (the underlying runtime will translate that if you're on a weird OS, e.g., Windows;-). The only reason to use \r is if you're writing to a character terminal (or more likely a "console window" emulating it) and want the next line you write to overwrite the last one you just wrote (sometimes used for goofy "ascii animation" effects of e.g. progress bars) -- this is getting pretty obsolete in a world of GUIs, though;-).

    0 讨论(0)
提交回复
热议问题