\n(换行符)和\r(回车符)有什么区别?
特别地,\n和\r之间有什么实际的区别吗?是否有应该使用其中一种而不是另一种的地方?
\n(换行符)和\r(回车符)有什么区别?
特别地,\n和\r之间有什么实际的区别吗?是否有应该使用其中一种而不是另一种的地方?
当前回答
历史上,a \n用于向下移动车厢,而\r用于将车厢移回页面的左侧。
其他回答
#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的地方,它不会工作,并试着猜测为什么?
\r:回车̲return cr -返回行首回车 \n:换行(n̲ew Line) lf -纸上一行
在屏幕输出的上下文中:
CR:将光标返回到当前行的开头 “LF”:光标下移一行
例如:
你好,\n世界\r!
应该在您的终端上呈现为:
Hello,
! world
一些操作系统可能会破坏预期行为的兼容性,但这不会改变“\n和\r之间的差异?”这个问题的答案。
\n(换行符)和\r(回车符)有什么区别? 特别地,\n和\r之间有什么实际的区别吗?是否有应该使用其中一种而不是另一种的地方?
我想用各自的转义序列\n(换行符)和\r(回车符)做一个简短的实验,以说明它们之间的明显区别。
我知道,这个问题是独立于语言的。尽管如此,我们至少需要一种语言来完成这个实验。在我的例子中,我选择了c++,但这个实验通常适用于任何编程语言。
该程序只是通过for循环迭代将一个句子打印到控制台。
换行符计划:
#include <iostream>
int main(void)
{
for(int i = 0; i < 7; i++)
{
std::cout << i + 1 <<".Walkthrough of the for-loop \n"; // Notice `\n` at the end.
}
return 0;
}
输出:
1.Walkthrough of the for-loop
2.Walkthrough of the for-loop
3.Walkthrough of the for-loop
4.Walkthrough of the for-loop
5.Walkthrough of the for-loop
6.Walkthrough of the for-loop
7.Walkthrough of the for-loop
注意,此结果不会在任何系统上提供,您正在执行此c++代码。但它适用于最现代的系统。阅读下文了解更多细节。
现在,同样的程序,但不同的是,在打印序列的末尾,\n被\r取代。
车厢返回程序:
#include <iostream>
int main(void)
{
for(int i = 0; i < 7; i++)
{
std::cout << i + 1 <<".Walkthrough of the for-loop \r"; // Notice `\r` at the end.
}
return 0;
}
输出:
7.Walkthrough of the for-loop
注意到区别在哪了吗?不同之处在于,当您在每个打印序列的末尾使用回车返回转义序列\r时,此序列的下一次迭代不会进入下面的文本行-在每个打印序列的末尾,光标不会跳转到下一行的*开头。
相反,在使用\r字符之前,光标跳回到该行的开头,他一直在该行的末尾。-结果是,打印序列的每个后续迭代都将取代前一个。
*注:A \n不一定跳转到下一行文本的开头。在一些较老的操作系统上,\n换行符的结果可能是,它跳转到下一行的任何位置,而不仅仅跳转到开头。这就是为什么,他们需要使用\r \n来获得在下一个文本行的开始。
这个实验向我们展示了在打印序列的迭代输出中换行符和回车符的区别。
在讨论程序中的输入时,一些终端/控制台可能会隐式地将回车符转换为换行符,以获得更好的可移植性、兼容性和完整性。
但是,如果您可以选择为另一个选择,或者希望或需要显式地只使用特定的一个,那么您应该始终使用符合其目的并严格区分的那个操作。
两个不同的角色。
\n在Unix文本文件中用作行结束符
\r历史上(在os X之前)在Mac文本文件中用作行结束符
\r\n(即同时使用)用于终止Windows和DOS文本文件中的行。
在ascii码方面,它是3——因为它们分别是10和13;-)。
但说真的,有很多:
in Unix and all Unix-like systems, \n is the code for end-of-line, \r means nothing special as a consequence, in C and most languages that somehow copy it (even remotely), \n is the standard escape sequence for end of line (translated to/from OS-specific sequences as needed) in old Mac systems (pre-OS X), \r was the code for end-of-line instead in Windows (and many old OSs), the code for end of line is 2 characters, \r\n, in this order as a (surprising;-) consequence (harking back to OSs much older than Windows), \r\n is the standard line-termination for text formats on the Internet for electromechanical teletype-like "terminals", \r commands the carriage to go back leftwards until it hits the leftmost stop (a slow operation), \n commands the roller to roll up one line (a much faster operation) -- that's the reason you always have \r before \n, so that the roller can move while the carriage is still going leftwards!-) Wikipedia has a more detailed explanation. for character-mode terminals (typically emulating even-older printing ones as above), in raw mode, \r and \n act similarly (except both in terms of the cursor, as there is no carriage or roller;-)
In practice, in the modern context of writing to a text file, you should always use \n (the underlying runtime will translate that if you're on a weird OS, e.g., Windows;-). The only reason to use \r is if you're writing to a character terminal (or more likely a "console window" emulating it) and want the next line you write to overwrite the last one you just wrote (sometimes used for goofy "ascii animation" effects of e.g. progress bars) -- this is getting pretty obsolete in a world of GUIs, though;-).