3zz*_*zzy 556 newline carriage-return
\n(换行)和\r(回车)有什么区别?
特别是,和之间有什么实际的区别吗?是否有应该使用的地方而不是另一个?\n\r
Ale*_*lli 769
就ascii代码而言,它是3 - 因为它们分别是10和13 ;-).
但严重的是,有很多:
\n是行尾的代码,\r没什么特别的\n是行尾的标准转义序列(根据需要转换为特定于OS的序列)\r是代码行的代码\r\n按此顺序为2个字符\r\n是因特网上文本格式的标准行终止\r命令托架向左返回直到它到达最左边的停止(慢速操作),\n命令滚轮向上滚动一行(更快的操作) - 这就是你总是有的原因\r 之前 \n,因此当马车仍然向左移动时,滚轮可以移动! - )维基百科有更详细的解释.\r和\n作用相似(除了无论是在光标而言,因为是没有托架或滚柱;-)在实践中,在写入文本文件的现代环境中,您应该始终使用\n(如果您使用的是奇怪的操作系统,则底层运行时将翻译它,例如Windows ;-).使用的唯一原因\r是如果你正在写一个字符终端(或更可能是一个模拟它的"控制台窗口"),并希望你写的下一行覆盖你刚写的最后一行(有时用于傻瓜"ascii动画"例如进度条的影响" - 这在GUI的世界中变得相当过时了;-).
tst*_*ter 121
历史上,a \n用于向下移动托架,而\r用于将托架移回页面的左侧.
pav*_*ium 31
两个不同的角色.
\n 用作Unix文本文件中的行尾终止符
\r 用作Mac文本文件中的行尾终止符
\r\n (即两者)用于终止Windows和DOS文本文件中的行.
not*_*ary 22
因为没有其他人特别提到它(它们是否太年轻而不知道/记得?) - 我怀疑使用的\r\n是打字机和类似设备.
如果您在使用支持多行功能的打字机时想要换行,则必须执行两项物理操作:将滑架滑回页面的开头(左侧,在美国),然后将纸张向上送一个档位.
回到行式打印机的时代,唯一可以做粗体文本的方法是,在没有换行的情况下进行回车并在旧行上打印相同的字符,从而添加更多墨水,从而使其看起来更暗(粗体) .当机械"换行"功能在打字机中失败时,这就是令人讨厌的结果:如果您没有注意,可以输入上一行文本.
Ian*_*oyd 17
\\r:回车 R\xcc\xb2eturn CR \xe2\x80\x94 将回车返回到行首\\n:换行(N\xcc\xb2ew 行)LF\xe2\x80\x94 将纸张向上移一行在屏幕输出的上下文中:
\n例如:
\n\n\n你好,\\n世界\\r!
\n
应该在您的终端上呈现为:
\nHello,\n! world\nRun Code Online (Sandbox Code Playgroud)\n某些操作系统可能会破坏与预期行为的兼容性,但这不会改变问题“\\n 和 \\r 之间的差异?”的答案。
\na43*_*511 12
不同操作系统的两个不同字符.此外,这在传输的数据中起作用TCP/IP,需要使用\r\n.
\n Unix的
\r 苹果电脑
\r\n Windows和DOS.
去完成,
在shell(bash)脚本中,您可以使用\r在线前发送光标,当然也\n可以将光标放在新行上.
例如,尝试:
echo -en "AA--AA" ; echo -en "BB" ; echo -en "\rBB"
Run Code Online (Sandbox Code Playgroud)
AA--AAAA--AABBBB--AABB但不要忘记使用-en作为参数.
在 Windows 中,\n 移动到下一行的开头。\r 移动到当前行的开头,而不移动到下一行。我在我自己的控制台应用程序中使用了 \r,我正在测试一些代码,我不想看到文本在我的屏幕上滚动,所以不要在打印出一些文本后使用 \n,比如帧速率( FPS), 我会 printf("%-10d\r", fps); 这会将光标返回到该行的开头,而不会向下移动到下一行,并允许我在屏幕上获得不会滚动的其他信息,同时帧率在同一行上不断更新(%-10 使确定输出至少为 10 个字符,左对齐所以它最终用空格填充,覆盖该行的任何旧值)。对于这样的东西,它非常方便,
一点历史
/r 代表“返回”或“回车”,它的历史归功于打字机。回车将您的马车一直向右移动,因此您在行首输入。
/n 再次代表“换行”,从打字机时代开始,您移到了新行。但这并不是它的开始,这就是为什么一些操作系统需要一个 /r 返回,然后是一个 /n 换行符,因为这是打字机的顺序。它还解释了使用的旧 8 位计算机有“回车”而不是“回车”,来自熟悉的“回车”。
\n\n\xe2\x80\x99s \\n(换行符)和\\r(回车符)之间有什么区别?
\n\n
\\n特别是,和之间有任何实际差异吗\\r?有哪些地方应该使用其中一种而不是另一种?
我想对\\n换行符和\\r回车符各自的转义序列进行一个简短的实验,以说明它们之间的明显区别在哪里。
我知道,这个问题是与语言无关的。尽管如此,我们至少需要一种语言来完成实验。就我而言,我选择了 C++,但该实验通常适用于任何编程语言。
\n该程序只是迭代将一个句子打印到控制台,这是通过 for 循环迭代完成的。
\n换行程序:
\n#include <iostream>\n\nint main(void)\n{\n for(int i = 0; i < 7; i++)\n {\n std::cout << i + 1 <<".Walkthrough of the for-loop \\n"; // Notice `\\n` at the end.\n }\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n输出:
\n1.Walkthrough of the for-loop\n2.Walkthrough of the for-loop\n3.Walkthrough of the for-loop\n4.Walkthrough of the for-loop\n5.Walkthrough of the for-loop\n6.Walkthrough of the for-loop\n7.Walkthrough of the for-loop\nRun Code Online (Sandbox Code Playgroud)\n请注意,此结果不会在任何系统上提供,您正在执行此 C++ 代码。但它适用于最现代的系统。请阅读下文了解更多详情。
\n现在,相同的程序,但有所不同,即在打印序列末尾\\n替换为。\\r
回车程序:
\n#include <iostream>\n\nint main(void)\n{\n for(int i = 0; i < 7; i++)\n {\n std::cout << i + 1 <<".Walkthrough of the for-loop \\r"; // Notice `\\r` at the end.\n }\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n输出:
\n7.Walkthrough of the for-loop \nRun Code Online (Sandbox Code Playgroud)\n注意到区别在哪里了吗?区别就在于,当您\\r在每个打印序列末尾使用回车转义序列时,该序列的下一次迭代不会进入以下文本行 - 在每个打印序列末尾,光标没有进入跳转到下一行的 * 开头。
相反,在使用该字符之前,光标跳回行首,也就是他所在的行尾\\r。- 结果是打印序列的每个后续迭代都会替换前一个迭代。
*注意:A\\n不一定跳转到以下文本行的开头。在某些操作系统(通常是更古老的操作系统)上,\\n换行符的结果可能是跳到下一行中的任何位置,而不仅仅是开头。这就是为什么,他们需要使用\\r \\n来获取下一个文本行的开头。
这个实验向我们展示了在打印序列迭代的输出上下文中换行符和回车符之间的区别。
\n当讨论程序中的输入时,某些终端/控制台可能会将回车符隐式转换为换行符,以实现更好的可移植性、兼容性和完整性。
\n但是,如果您可以选择其中之一,或者想要或需要明确仅使用特定的一个,则应始终使用符合其目的的那个,并严格区分。
\n