'\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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mrbone11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值