\\n
(换行符)和\\r
(回车符)有什么区别?
特别是\\n
和\\r
之间是否有实际区别? 在某些地方应该使用一个而不是另一个?
#1楼
两个不同的字符。
\\n
用作Unix文本文件中的行结束符
\\r
用作Mac文本文件中的行结束符
\\r\\n
(即两者)用于终止Windows和DOS文本文件中的行。
#2楼
从历史上看, \\n
用于将笔架向下移动,而\\r
用于将笔架移回到页面的左侧。
#3楼
不同操作系统的两个不同字符。 这在需要使用\\r\\n
通过TCP/IP
传输的数据中也起作用 。
\\n
Unix
\\r
Mac
\\r\\n
Windows和DOS。
#4楼
就ASCII码而言,它是3-因为它们分别是10和13 ;-)。
但认真的说,有很多:
- 在Unix和所有类似Unix的系统中,
\\n
是行尾代码,\\r
表示没什么特别的 - 因此,在C语言和大多数以某种方式(甚至是远程)复制它的语言中,
\\n
是行尾的标准转义序列(根据需要转换为OS特定的序列/从OS特定的序列转换为该序列) - 在旧的Mac系统(OS X之前的版本)中,
\\r
代替了行尾代码 - 在Windows(和许多旧的操作系统)中,行尾代码按顺序是2个字符
\\r\\n
。 - (令人惊讶;-)的后果(回到比Windows更早的操作系统),
\\r\\n
是Internet上文本格式的标准行终止符 - 对于类似机电电传打字机的“终端”,
\\r
命令滑架向左返回,直到碰到最左边的挡块(缓慢的操作),\\n
命令滚轮向上滚动一行(操作快得多),这就是原因你总是有\\r
之前\\n
,所以,虽然车还在继续向左辊可以移动- !),维基百科有一个更详细的解释 。 - 为字符模式端子(典型的模拟偶数旧的印刷那些如上述),在原始模式下,
\\r
和\\n
在光标方面类似(动作除了两者,因为没有托架或滚柱;-)
实际上,在现代的写入文本文件的上下文中,应始终使用\\n
(如果您使用的是奇怪的操作系统(例如Windows;-,则底层的运行时将翻译该内容)。 使用\\r
的唯一原因是,如果您正在写一个字符终端(或者更可能是一个模拟它的“控制台窗口”),并且希望您写的下一行覆盖您刚写的最后一行(有时用于愚蠢的“ ascii动画”(例如进度条)的效果)–不过,在GUI的世界中这已经变得过时了;-)。
#5楼
去完成,
在shell(bash)脚本中,您可以使用\\r
在行的前面发送光标,当然也可以使用\\n
在新行上放置光标。
例如,尝试:
echo -en "AA--AA" ; echo -en "BB" ; echo -en "\rBB"
- 第一个“回声”显示
AA--AA
- 第二种:
AA--AABB
- 上一个:
BB--AABB
但是不要忘记使用-en
作为参数。
#6楼
在Windows中,\\ n移至下一行的开头。 \\ r移至当前行的开头,而不移至下一行。 我已经在自己的控制台应用程序中使用了\\ r,在其中我正在测试一些代码,并且我不想看到文本在屏幕上滚动,因此在打印出一些文本(例如帧频后, FPS),我将打印f(“%-10d \\ r”,fps); 这会将光标返回到该行的开头,而不会向下移动到下一行,并允许我在屏幕上显示其他信息,而当帧率在同一行上不断更新时,该信息不会滚动(%-10表示确定输出至少为10个字符,请左对齐,以便最后用空格填充,并覆盖该行的所有旧值)。 通常,当我将调试的东西输出到控制台屏幕时,使用此类东西非常方便。
一点历史
/ r代表“归还”或“回车”,这归功于打字机的历史。 回车将您的车一直向右移动,因此您在行首输入。
/ n代表“换行”,从打字机时代开始,您一直移到新行。 不过,这并不是很重要,这就是为什么某些操作系统同时要求同时返回/ r和/ n换行符的原因,因为这是打字机执行输入命令的顺序。这也解释了使用8位旧计算机的原因。从熟悉的“回车”中选择“返回”而不是“输入”。
#7楼
由于没有人特别提到它(他们还太年轻,不知道/不记得吗?)-我怀疑\\r\\n
起源是打字机和类似设备。
当您在使用具有多行功能的打字机时想要换行时,它必须执行两个物理操作:将笔架滑回到页面的开头(在美国,左侧),并将纸张送入一个缺口。
回到行式打印机时代,例如,执行粗体文本的唯一方法是在不换行的情况下返回回车,并在旧字符上打印相同的字符,从而增加墨水量,从而使其看起来更暗(合并) 。 当机械的“换行”功能在打字机中失败时,这就是令人讨厌的结果:如果您不注意,则可以在前一行文本上键入内容。
#8楼
只是增加了混乱,我一直在使用浏览器的HTML页面中的TextArea元素来开发一个简单的文本编辑器。 考虑到CR / LF的兼容性问题,我编写了代码来检查平台,并使用适用于该平台的换行符。
但是,当我通过一个小的JavaScript函数检查TextArea中包含的实际字符时发现了一些有趣的东西,该函数生成了与字符相对应的十六进制数据。
为了进行测试,我输入了以下文本:
您好,世界[输入]
再见,残酷的世界[输入]
当我检查文本数据时,获得的字节序列是这样的:
48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 0a 47 6f 6f 64 62 79 65 2c 20 43 72 75 65 6c 20 57 6f 72 6c 64 0a
现在,大多数查看此内容并看到0a但没有0d字节的人会认为,此输出是在Unix / Linux平台上获得的。 但是,问题出在这里:我在Windows 7 64位版的Google Chrome中获得了此序列。
因此,如果您正在使用TextArea元素并检查文本,请按照上面的操作检查输出,以确保从TextArea返回了哪些实际字符字节。 我尚未看到这在其他平台或其他浏览器上是否有所不同,但是如果您要通过JavaScript执行文本处理,并且需要使该文本处理平台独立,则需要牢记这一点。
以上文章中涵盖的约定适用于控制台输出,但看起来HTML元素遵循UNIX / Linux约定。 除非有人在其他平台/浏览器上发现其他问题。
#9楼
#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它将不起作用,并尝试猜测原因?