以下控制字符的含义是什么:
回车
换行
换页
Carriage return means to return to the beginning of the current line without advancing downward. The name comes from a printer's carriage, as monitors were rare when the name was coined. This is commonly escaped as \r
, abbreviated CR, and has ASCII value 13
or 0x0D
.
Linefeed means to advance downward to the next line; however, it has been repurposed and renamed. Used as "newline", it terminates lines (commonly confused with separating lines). This is commonly escaped as \n
, abbreviated LF or NL, and has ASCII value 10
or 0x0A
. CRLF (but not CRNL) is used for the pair \r\n
.
Form feed means advance downward to the next "page". It was commonly used as page separators, but now is also used as section separators. (It's uncommonly used in source code to divide logically independent functions or groups of functions.) Text editors can use this character when you "insert a page break". This is commonly escaped as \f
, abbreviated FF, and has ASCII value 12
or 0x0C
.
As control characters, they may be interpreted in various ways.
The most common difference (and probably the only one worth worrying about) is lines end with CRLF on Windows, NL on Unix-likes, and CR on older Macs (the situation has changed with OS X to be like Unix). Note the shift in meaning from LF to NL, for the exact same character, gives the differences between Windows and Unix. (Windows is, of course, newer than Unix, so it didn't adopt this semantic shift. I don't know the history of Macs using CR.) Many text editors can read files in any of these three formats and convert between them, but not all utilities can.
Form feed is a bit more interesting (even though less commonly used directly), and with the usual definition of page separator, it can only come between lines (e.g. after the newline sequence of NL, CRLF, or CR) or at the start or end of the file.
\r
是回车并将光标向后移动,就像我会做的那样-
printf("stackoverflow\rnine")
ninekoverflow
表示它已将光标移动到“stackoverflow”的开头并覆盖了开始的四个字符,因为“nine”是四个字符长。
\n
是换行符,它改变行并将光标带到新行的开头,如 -
printf("stackoverflow\nnine")
stackoverflow
nine
\f
是换页,它的使用已经过时了,但它用于提供缩进,如
printf("stackoverflow\fnine")
stackoverflow
nine
如果我会这样写——
printf("stackoverflow\fnine\fgreat")
stackoverflow
nine
great
简而言之 :
Carriage_return(\r
或0xD
):在同一行的开头进行控制。
Line_Feed(\n
或0xA
):在下一行开始时进行控制。
form_feed(\f
或0xC
):在下一页开始时进行控制。
看看维基百科:
基于 ASCII 或兼容字符集的系统单独使用 LF(换行,'\n',0x0A,十进制的 10)或 CR(回车,'\r',0x0D,十进制的 13),或 CR 后跟低频(CR+低频,0x0D 0x0A)。这些字符基于打印机命令:换行表示应从打印机送出一行纸,回车表示打印机回车应返回到当前行的开头。
\f
用于分页。您在控制台中看不到任何效果。但是,当您在文件中使用此字符常量时,您会看到不同之处。
另一个例子是,如果您可以将输出重定向到文件,那么您不必编写文件或使用文件处理。
例如:
用 C++ 编写这段代码
void main()
{
clrscr();
cout<<"helloooooo" ;
cout<<"\f";
cout<<"hiiiii" ;
}
当你编译它时它会生成一个 exe (for ex. abc.exe
)
然后您可以使用以下命令将输出重定向到文件:
abc > xyz.doc
然后打开文件xyz.doc
你可以看到hellooo和hiiii之间的实际分页符....
在旧的纸质打印机终端上,前进到下一行涉及两个动作:将打印头移回水平扫描范围的开头(回车)和前进正在打印的纸卷(换行)。
由于我们不再使用纸质打印机终端,这些动作不再真正相关,但用来表示它们的字符已经以各种形式存在。
除了上述信息,LF (\n) 和 CR (\r) 还有一段有趣的历史。[原作者:阮一峰 来源:http://www.ruanyifeng.com/blog/2006/04/post_213.html] 在电脑出现之前,有一种电传打字机叫Teletype Model 33,每台可以打印10个字符第二。但是这样做有一个问题,每行打印完后,移动到下一行需要0.2秒,也就是打印2个字符的时间。如果在这 0.2 秒内传输了一个新角色,那么这个新角色将丢失。
于是科学家找到了解决这个问题的方法,他们在每行后面加上两个结束字符,一个是“回车”,就是告诉打印机把打印头向左移动。另一个是“换行”,它告诉打印机将纸张向上移动 1 行。
后来,计算机开始流行起来,这两个概念都用在了计算机上。那个时候存储设备很贵,所以有科学家说每行末尾加两个字符很贵,一个就够了,所以使用哪一个存在一些争论。
在 UNIX/Mac 和 Linux 中,'\n' 放在每一行的末尾,在 Windows 中,'\r\n' 放在每一行的末尾。这种使用的结果是,如果在 Windows 中打开,UNIX/Mac 中的文件将显示在一行中。如果在 UNIX 或 Mac 中打开文件,Windows 中的文件将在每行末尾有一个 ^M。
考虑一台 IBM 1403 冲击式打印机。CR 将打印头移动到行首,但没有推进纸张。这允许“叠印”,将多行输出放在一行上。像下划线这样的事情是通过这种方式实现的,BOLD 打印也是如此。LF 将纸推进了一行。如果没有 CR,下一行将按交错步打印,因为 LF 没有移动打印头。FF 将论文推进到下一页。它通常还将打印头移动到新页面第一行的开头,但您可能需要 CR。可以肯定的是,大多数程序员在页面最后一行的末尾编码 CRFF 而不是 CRLF,因为 FF 创建的额外 CR 无关紧要。
作为补充,
1、回车:这是一个打印机术语,意思是将打印位置更改为当前行的开头。在计算机世界中,它在大多数情况下意味着返回当前行的开头,但很少代表新行。
2、换行:这是一个打印机术语,意思是将纸张前进一行。所以回车和换行一起使用,在新行的开头开始打印。在计算机世界中,它通常与换行符具有相同的含义。
3,换页:这是一个打印机术语,我喜欢这个线程中的解释。
如果您正在为 1980 年代风格的打印机编程,它会弹出纸张并开始新页面。您几乎可以肯定永远不需要它。
它几乎已经过时了,您可以参考转义序列 \f - 换页 - 它到底是什么?详细解释。
注意,我们可以在某些平台上使用 CR 或 LF 或 CRLF 来代表换行符,但在其他一些平台上,换行符不能被它们代表。有关详细信息,请参阅wiki 换行符。
LF:Multics、Unix 和类 Unix 系统(Linux、OS X、FreeBSD、AIX、Xenix 等)、BeOS、Amiga、RISC OS 等
CR:Commodore 8 位机器、Acorn BBC、ZX Spectrum、TRS-80、Apple II 系列、Oberon、经典 Mac OS 至版本 9、MIT Lisp Machine 和 OS-9
RS:QNX pre-POSIX 实施
0x9B:使用 ASCII 的 ATASCII 变体(十进制为 155)的 Atari 8 位机器
CR+LF:Microsoft Windows、DOS(MS-DOS、PC DOS等)、DEC TOPS-10、RT-11、CP/M、MP/M、Atari TOS、OS/2、Symbian OS、Palm OS、 Amstrad CPC,以及大多数其他早期的非 Unix 和非 IBM 操作系统
LF+CR:Acorn BBC 和 RISC OS 假脱机文本输出。
“\n”是换行符。这意味着结束当前行并为正在阅读它的任何人转到新行。
回车和换行也是对打字机的参考,在小车左侧(纸张所在的地方)的手柄上轻轻一推,纸张会围绕圆柱体旋转少量,推进打字机记录一行。如果您已经完成了一行的输入,并想继续输入下一行,您会更加努力,推进一行并将托架一直向右滑动,然后在托架随着每次击键移动时再次从左到右继续输入. 不用说,自动换行是那个时代所有文字处理的默认设置。P:D
这些是非打印字符,与“新行”的概念有关。\n 是换行符。\r 是回车。在不同的平台上,相对于有效的新行,它们具有不同的含义。在 Windows 中,换行符是 \r\n。在 Linux 中,\n. 在 mac 中,\r。
实际上,您将它们放在任何字符串中,它都会对字符串的打印输出产生影响。
许多(50)年前,当我在皇家信号机当学徒时,电传打字机和打字机都有带有打印头的“马车”。当你按下 RETURN 时,马车会飞到左边。因此,回车 (CR)。您可以只退回 Carriage,但在机械打字机上,您将使用 Lever(很像电吉他上的颤音杆),它也可以进行 Line Feed。你的下一个问题是你为什么不想要换行符?呵呵,在那些日子里,要删除字符,我们会做一个 CR,然后在锤头和纸之间使用类似 Tip-ex 的纸,然后键入相同的键以用白色墨水覆盖。一些花哨的打字机有一个可以按的键。所以你去。