\ n和\ r之间的区别?
\n
(换行符)和\r
(回车)有什么区别?
特别是\n
和\r
之间是否有实际区别? 有没有哪个地方可以用来代替另一个呢?
在ASCII代码方面,它是3 – 因为它们分别是10和13 ;-)。
但严重的还有很多:
- 在Unix和所有类Unix系统中,
\n
是行尾的代码,\r
意思是没有特别的 - 因此,在C语言和大多数语言中(甚至远程地)复制它,
\n
是行结束的标准转义序列(根据需要翻译到特定于操作系统的序列) - 在旧的Mac系统(pre-OS X)中,
\r
代替行尾 - 在Windows(以及许多旧的操作系统)中,行尾的代码是2个字符,按此顺序
- 作为一个(令人惊讶的;-)结果(回溯到比Windows更早的操作系统),
\r\n
是Internet上文本格式的标准行终止 - 对于机电传真types的“terminal”,
\r
命令滑架向左返回,直到它碰到最左边的停止点(一个缓慢的操作),\n
命令滚筒向上滚动一行(更快的操作) – 这就是因为你总是在\n
之前有\r
,所以当滑架仍然向左走时滚筒可以移动! - 对于字符模式的terminal(通常是模仿上面那些甚至更早的打印的),在原始模式下,
\r
和\n
作用类似(除了光标,因为没有托架或滚筒;-)
在实践中,在写入文本文件的现代语境中,你应该总是使用\n
(如果你在一个奇怪的操作系统,例如Windows,底层的运行库将会翻译它;-)。 使用\r
的唯一原因是,如果你正在写一个字符terminal(或者更可能是一个“控制台窗口”模拟它),并希望你写的下一行覆盖你刚写的最后一个(有时用于愚蠢的“ asciianimation“的效果,例如进度条),但是在GUI的世界里这已经变得相当陈旧了,但是;-)。
历史上用\n
来移动滑架, \r
用来将滑架移回到页面的左侧。
两个不同的字符。
\n
在Unix文本文件中用作行结束符
\r
在Mac文本文件中用作行结束符
\r\n
(即两个)用于终止Windows和DOS文本文件中的行。
因为没有人特别提到它(他们是否太年轻,不知道/记得吗?) – 我怀疑使用打字机和类似设备。
如果您在使用支持多行打字机的时候需要一条新的生产线,则需要执行两项物理操作:将纸盒滑回到页面的开头(左侧,在美国),然后将纸张向上送一个槽口。
在行式打印机的日子里,唯一的做粗体文本的方法就是在没有换行符的情况下进行回车,并在旧的打印机上打印相同的字符,从而增加更多的墨水,从而使其看起来较暗(粗体) 。 当机械的“换行”function在打字机中失败时,这是令人讨厌的结果:如果您不注意,可以键入上一行文本。
两个不同的字符为不同的操作系统。 而且这在通过TCP/IP
传输的数据中起作用,这需要使用\r\n
。
\n
Unix
Mac电脑
\r\n
Windows和DOS。
去完成,
在shell(bash)脚本中,可以使用\r
发送光标,在前面放置,当然\n
将光标放在新行上。
例如,尝试:
echo -en "AA--AA" ; echo -en "BB" ; echo -en "\rBB"
- 第一个“回声”显示
AA--AA
- 第二个:
AA--AABB
- 最后一个:
BB--AABB
但是不要忘记使用-en
作为参数。
在窗口中,\ n移动到下一行的开头。 \ r移动到当前行的开头,而不移动到下一行。 我在我自己的控制台应用程序中使用了\ r,在这里我testing了一些代码,而且我不想看到文本滚动到我的屏幕上,所以在打印出一些文本之后,例如帧率( FPS),我会printf(“% – 10d \ r”,fps); 这将返回光标到行的开头,而不移动到下一行,并允许我在屏幕上有其他信息不会滚动,而帧速率不断更新在同一行(%-10使确定输出是至less10个字符,左alignment,所以它最终填充空格,覆盖该行的任何旧值)。 这样的东西非常方便,通常当我debugging东西输出到我的控制台屏幕。
有一点历史
/ r表示归功于打字机的“返回”或“回车”。 回车把你的马车一直移到右边,所以你在行的开头打字。
/ n代表“新行”,再次从打字机的日子开始,向下移动到新行。 这并不意味着它的开始,这就是为什么一些操作系统采用了a / r返回和/ n换行符的需要,因为这是打字机的命令。它还解释了旧的8位计算机从“回车”,这是熟悉的“返回”,而不是“回车”。
#include <stdio.h> void main() { int countch=0; int countwd=1; printf("Enter your sentence in lowercase: "); char ch='a'; while(ch!='\r') { ch=getche(); if(ch==' ') countwd++; else countch++; } printf("\n Words = ",countwd); printf("Characters = ",countch-1); getch(); }
让这个例子试着把\ n代替\ r它不会工作,并试图猜测为什么?