ChatGPT解决这个技术问题 Extra ChatGPT

什么是回车、换行和换页?

以下控制字符的含义是什么:

回车 换行 换页

“回程”是什么意思?我的笔记本电脑上没有看到任何“马车”“返回”。 :秒
@JeanHominal 马车基本上表示光标(或古代打字机中的指针),return 表示返回该行的开头。
在我的“终端”“窗口”中,我没有看到任何终止的电线(或任何玻璃窗格),也没有连接到 /dev/tty1 的“电传打字机”。都变成了隐喻。
我很惊讶这些是您想知道的仅有的三个控制字符。

R
Roger Pate

回车是指返回当前行的开头而不向下推进。该名称来自打印机的马车,因为在创造该名称时显示器很少见。这通常转义为“\r”,缩写为 CR,ASCII 值为 13 或 0xD。

Linefeed 表示向下前进到下一行;但是,它已被重新利用并重新命名。用作“换行符”,它终止行(通常与分隔线混淆)。这通常转义为“\n”,缩写为 LF 或 NL,ASCII 值为 10 或 0xA。 CRLF(但不是 CRNL)用于“\r\n”对。

换页意味着向下前进到下一个“页面”。它通常用作页面分隔符,但现在也用作部分分隔符。当您“插入分页符”时,文本编辑器可以使用此字符。这通常转义为“\f”,缩写为 FF,ASCII 值为 12 或 0xC。

作为控制字符,它们可以以各种方式解释。

最重要的解释是这些字符如何分隔行。行在 Unix(包括 OS X)上以 NL 结尾,在 Windows 上以 CRLF 结尾,在旧 Mac 上以 CR 结尾。请注意,对于完全相同的字符,从 LF 到 NL 的含义转变给出了 Windows 和 Unix 之间的差异,这也是许多 Windows 程序使用 CRLF 来分隔而不是终止行的原因。许多文本编辑器可以读取这三种格式中的任何一种格式的文件并在它们之间进行转换,但并非所有实用程序都可以。

换页很少使用。作为页面分隔符,它只能出现在行之间或文件的开头或结尾。


我可以确认 OS X 使用 NL 作为行终止符,就像 Unix 一样(因为 OS X is 是 Unix)。 CR 用于 Mac OS 9 及以下。
FF 字符在今天可能看起来很奇怪(与“CTRL-G”铃字符一起),但当视频显示远不那么普遍并且使用硬拷贝终端作为数据显示时,它具有更多的相关性。
这不是提要控件 \x0c 吗?
“我不知道 Mac 使用 CR 的历史。”这可能来自使用 CR 的 Apple II。 CR 在其他 8 位系统上也很常见,例如 Commodore 和 Tandy。 ASCII 在这些系统上并不是通用的:Commodore 使用 PETSCII,它的 LF 在 0x8d (!)。 Atari 根本没有 LF 字符。无论出于何种原因,CR = 0x0d 或多或少都是标准的。
可能值得注意的是,某些程序实际上确实将行尾字符视为分隔符而不是终止符,尽管我能想到的唯一一个是 Ace 编辑器,它可以让您保存没有尾随行的文件结尾。另一方面,Nano 编辑器总是会附加一个行尾,如果 Bash 脚本没有尾随换行符,则不会读取文件末尾的行。
e
e0k

\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

但是这个例子不适用于高级语言!
@ᔕIᑎᗩKᗩᖇᐯᗩᑎᗪ我确实如此:您至少可以使用 coreutils 中的 printf 实用程序在 Linux shell 中执行相同操作。甚至使用 bash 内置的 echo -en
如何将所有行作为文件中的一行传递?
缩进不使用换页。如果您将其中的一些发送到打印机,它会吐出纸张。您所描述的 \f 实际上是 \v - 一个垂直选项卡,授予两者在控制台中看起来相同。
printf("123\f456\f789"); 显示 /><bold>123456789</bold>在控制台上。
i
informatik01

简而言之:

回车(\r 或 0xD):控制从同一行开始。

换行(\n 或 0xA):在下一行开始时取得控制权。

换页(\f 或 0xC):控制从下一页开始。

更多详细信息和更多控制字符可在以下页面中找到:Control character


应该鼓励这样简洁的回答。
简洁的答案仅在数学等少数领域是优雅的。 Windows 同时使用 0x0A 0x0D,这些都是随意做出的选择。这些概念不是独立的,因此简洁的答案不适合这些情况。
@user5280911 是的,尽管在解释后提供更多细节也很有用,尤其是在这种情况下,需要考虑其他细节
简洁的答案非常适合您只是有点兴趣和匆忙的时候
t
tanascius

看看Wikipedia

基于 ASCII 或兼容字符集的系统单独使用 LF(换行,'\n',0x0A,十进制的 10)或 CR(回车,'\r',0x0D,十进制的 13),或 CR 后跟低频(CR+低频,0x0D 0x0A)。这些字符基于打印机命令:换行表示应将一行纸送出打印机,回车表示打印机回车应返回到当前行的开头。


K
Kent Pawar

\f 用于分页。您在控制台中看不到任何效果。但是,当您在文件中使用此字符常量时,您会看到不同之处。

另一个例子是,如果您可以将输出重定向到文件,那么您不必编写文件或使用文件处理。

例如:

用 C++ 编写这段代码

void main()    
{
    clrscr();
    cout<<"helloooooo" ;

    cout<<"\f";
    cout<<"hiiiii" ;

}

当你编译它时,它会生成一个 exe(例如 abc.exe

然后您可以使用以下命令将输出重定向到文件:

abc > xyz.doc

然后打开文件 xyz.doc,您可以看到 hellooo 和 hiiii.... 之间的实际分页符


A
Amber

在旧的纸质打印机终端上,前进到下一行涉及两个动作:将打印头移回水平扫描范围的开头(回车)和前进正在打印的纸卷(换行)。

由于我们不再使用纸质打印机终端,这些动作不再真正相关,但用来表示它们的字符已经以各种形式存在。


实际上,“回车”不会将打印头向左移动,而是将固定压板的托架向右移动。曾经有一个长杆由左手驱动来执行此操作。请参阅en.wikipedia.org/wiki/Typewriter
@MarkLakata True 对于打字机,但这个答案是关于旧的打印终端。例如,DEC LA36 (columbia.edu/cu/computinghistory/la36.html)。
老式机械打字机和一些电动打字机上的回车确实确实将托架和压板移到了右侧。由于文档被固定在托架中,因此将托架向右移动,具有将打印位置向左移动的效果。在带有移动打印头的电动打字机和大多数电传打字机上,托架和压板不会水平移动。相反,打印头移动了。此处回车将打印头返回到左侧。在这两种情况下,回车都会将打印位置返回到行首。
m
miken32

除了上述信息,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。


随着 OSX(基于 BSD unix)的发布,Mac 切换到 '\n' - Unix 行尾。
“如果在 Windows 中打开,UNIX/Mac 中的文件将显示在一行中。” WRITE.EXE(又名写字板)可以很好地显示它们。
CR 和 LF 在 Teletype 33 型之前大约 50 年分离:参见citeseerx.ist.psu.edu/viewdoc/…
D
Dick Guertin

考虑一台 IBM 1403 冲击式打印机。 CR 将打印头移动到行首,但没有推进纸张。这允许“叠印”,将多行输出放在一行上。像下划线这样的事情是通过这种方式实现的,BOLD 打印也是如此。 LF 将纸推进了一行。如果没有 CR,下一行将按交错步打印,因为 LF 没有移动打印头。 FF 将论文推进到下一页。它通常还将打印头移动到新页面第一行的开头,但您可能需要 CR。可以肯定的是,大多数程序员在页面最后一行的末尾编码 CRFF 而不是 CRLF,因为 FF 创建的额外 CR 无关紧要。


这是解释回车的全部含义的唯一答案。
@Lee 同意了。这些控制字符存在的历史原因与它们所做的一样重要。
C
Community

作为补充,

1、回车:这是一个打印机术语,意思是把打印位置改为当前行的开头。在计算机世界中,它在大多数情况下意味着返回当前行的开头,但很少代表新行。

2、换行:这是一个打印机术语,意思是将纸张前进一行。所以回车和换行一起使用,在新行的开头开始打印。在计算机世界中,它通常与换行符具有相同的含义。

3、Form feed:这是一个打印机术语,我喜欢this thread中的解释。

如果您正在为 1980 年代风格的打印机编程,它会弹出纸张并开始新页面。您几乎可以肯定永远不需要它。 http://en.wikipedia.org/wiki/Form_feed

它几乎已经过时,您可以参考Escape sequence \f - form feed - what exactly is it?了解详细说明。

注意,我们可以在某些平台上使用 CR 或 LF 或 CRLF 来代表换行符,但在其他一些平台上,换行符不能被它们代表。详情请参阅wiki Newline

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 机器和 OS-9 RS:QNX pre-POSIX 实现 0x9B:使用 ASCII 的 ATASCII 变体(十进制 155)CR 的 Atari 8 位机器+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 假脱机文本输出。


v
vpit3833

“\n”是换行符。这意味着结束当前行并为正在阅读它的任何人转到新行。


T
TheLastWordSword

回车和换行也是对打字机的参考,在小车左侧(纸张所在的地方)的手柄上轻轻一推,纸张会围绕圆柱体旋转少量,推进打字机记录一行。如果您已经完成了一行的输入,并想继续输入下一行,您会更加努力,推进一行并将托架一直向右滑动,然后在托架随着每次击键移动时再次从左到右继续输入.不用说,自动换行是那个时代所有文字处理的默认设置。 P:D


P
Palantir

这些是非打印字符,与“新行”的概念有关。 \n 是换行符。 \r 是回车。在不同的平台上,相对于有效的新行,它们具有不同的含义。在 Windows 中,换行符是 \r\n。在 Linux 中,\n.在 mac 中,\r。

实际上,您将它们放在任何字符串中,它都会对字符串的打印输出产生影响。


N
Nayana Chandran

许多(50)年前,当我在皇家信号机当学徒时,电传打字机和打字机都有带有打印头的“马车”。当你按下 RETURN 时,马车会飞到左边。因此,回车 (CR)。您可以只退回 Carriage,但在机械打字机上,您将使用 Lever(很像电吉他上的颤音杆),它也可以进行 Line Feed。你的下一个问题是你为什么不想要换行符?呵呵,在那些日子里,要删除字符,我们会做一个 CR,然后在锤头和纸之间使用类似 Tip-ex 的纸,然后键入相同的键以用白色墨水覆盖。一些花哨的打字机有一个可以按的键。所以你去。