“\n”和“\r”有什么区别?

5

可能是重复问题:
\r和\n有什么区别?

你好,

\n(换行)和\r(回车)有什么区别?它们都将当前光标移动到下一行。它们相同吗?


2
如果你在谈论这个概念的来源——打字机,那么在机械时代区分换行和回车是很重要的,但现在作为一个老旧的遗物被带入数字化世界,我们必须接受它。 - John K
1
重复的问题,与https://dev59.com/X3M_5IYBdhLWcg3wq1GF相同(尽管我希望我能引用Jon Skeet事实9277)。 - Andrew Grimm
6个回答

11

\r 会将光标返回到当前行的开头,而非下一行。在 Linux 中使用 \n 时,\r 会自动隐含使用;但在 Windows 中不会。

在类 Unix 系统中使用 \r 可能会导致覆盖同一行上的内容。


8

我建议你阅读这篇文章

简而言之,在Windows中换行符是"\r\n",而在Unix中换行符只是"\n"(并且为了让生活变得更加困难,旧版Mac中的换行符是"\r")。


2

实际上,回车符应该将光标移动到当前行的开头。然后,换行符将光标向下移动一行。

现在,编译器通常会自动将其中之一转换为Windows上的\r\n或Linux上的\n。Mac曾经使用\r,但他们已经改为了\n的惯例。

(编辑:删除了错误/未经测试的语句)


如果你在Linux中使用putchar('\r')并编译,\r将被替换为\n,这是完全错误的。打印\r会将光标移回控制台行的开头,随后的打印将覆盖光标旁边的字符。 - kennytm
哦,也许是Windows系统的问题吧……我刚试了一下,你说得对。可惜我不记得了,几个星期前我也遇到过这样的问题… - Ricket
啊,由于缺乏正确的记忆,我刚刚删除了整个段落。我知道其中有一些小问题,但目前无法弄清楚。 - Ricket

1

0

不是的。现代文本编辑器通常会将它们视为相同,因为它们在数字文字处理器中的旧用途并不太合理。

例如,\r 字符的字面意思是“返回到行首”。虽然如果您只想覆盖该行上的所有内容,这可能对打字机有用,但这种功能对于数字类型来说并没有太多意义。

另一方面,\n 只是简单地向下移动一行而不返回开头。这在打字机上也很有用,用于缩进或标记项目。同样,对于数字类型来说并不是很有意义。

Telnet 就是一个例子,在其中这两个字符仍然以这种方式使用。

这两个字符都包含在 ASCII 语言中,只是因为当它被规范化时,他们还没有意识到在计算机上有用的功能在打字机上并不太合理。


我不知道是否“他们没有意识到”——我怀疑更多的是因为当时人们仍然广泛使用输出设备,例如电传打字机,其中区别是有意义的。(例如,回车符而不带换行符是我们在古老的打字机上进行删除(甚至加粗)的方式,或者我猜是在我们拥有位图打印机之前的菊花轮打印机上。) - itowlson
是的,那就是我想说的,但我表达得很糟糕。:D 我稍微改了一下措辞,也许现在更好了? - Spencer Ruport

0
啊,打字机的旧日子……
这两者之间的区别源于很久以前打字是直接在纸上完成的时代。要进行下一行需要两个动作:
1. 将“车架”(顶部的大圆柱)推回到左边(这是字符最终停留的位置)。 2. 将纸张向上移动一行。(因此向下移动一行)
将这两个动作分开有助于回到精确的字符位置进行更正(没有办法上移一行或向左移一个字符!)。在错误字符上握住白纸并按下该键会清除该错误字符,然后您可以再次返回并按下正确的键(虽然有一个不移动车架的键)。
在年轻的计算机时代,这些操作被一对一地转换为\r表示回车,\n表示移动“纸张”。
现在,主要的操作系统显然对于计算机技术是否仍然需要这样做存在不同意见。然而,在现代编程语言中,通常假定\n表示\r\n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接