'\r'与'\n'区别及历史来源

为什么要有'\r'和'\n',分别代表什么?

首先了解什么是电传打印机

电传打字机(Teletype)是随着计算机的发展而出现的一种远距离信息传送器械

电传打字机通常由键盘、收发报器和印字机构等组成。发报时,按下某一字符键,就能将该字符的电码信号自动发送到信道;收报时,能自动接收来自信道的电码信号,并打印出相应的字符

这种打字机有一个打印头和一个滚轮,滚轮用来调整纸的纵向移动。当打印头打印完当前行之后需要将打印头移到最左边同时滚轮需要把纸纵向移动一行,从而打印新的一行的信息。但是由于是物理设备,这两个操作需要时间,在进行移动到下一行首的过程中仍然可能在接收电信号,这将导致这些电信号来不及打印而丢失,解决方案就是在每行后面都加上'\r'、'\n'这两个字符,用来抵消物理移动的时间,'\r'和'\n'分别对应打印头左移和滚轮滚动操作。需要分成两个字符的原因wiki上有解释但是看不懂..

Any character printed after a CR would often print as a smudge in the middle of the page while the print head was still moving the carriage back to the first position. "The solution was to make the newline two characters: CR to move the carriage to column one, and LF to move the paper up."

为什么是‘\r\n’而不是'\n\r'? 

由于CR(\r)操作比LF(\n)操作费得多时,因此总是先进行CR操作再进行LF操作,这样更节省时间。

C语言中'\r'和'\n'有什么区别?

C语言中'\r'代表把光标移到行首,‘\n‘就是代表一行结束,光标移动到新行首,在文本模式写文件时,会根据平台本身对换行的定义决定是'\n'还是'\r\n'。除非你想实现动态显示进度条功能,或者想覆盖最新一行的字符,才会使用到’\r‘,否则均使用'\n'换行,例如C语言中执行printf("123\r45")你将看到只有453这三个字符。

不同系统中“换行“分别对应什么字符?

  • \r = CR (Carriage Return) → Used as a new line character in Mac OS before X
  • \n = LF (Line Feed) → Used as a new line character in Unix/Mac OS X
  • \r\n = CR + LF → Used as a new line character in Windows
此外互联网上的换行符也是\r\n
 
参考:

https://blog.csdn.net/qq_40395278/article/details/81199281

https://en.wikipedia.org/wiki/Newline#History

https://stackoverflow.com/questions/15433188/r-n-r-and-n-what-is-the-difference-between-them

https://stackoverflow.com/questions/1761051/difference-between-n-and-r

你可能感兴趣的:('\r'与'\n'区别及历史来源)