提问人:alzmp 提问时间:11/5/2023 最后编辑:Atmoalzmp 更新时间:11/5/2023 访问量:76
为什么当我使用转义序列时会得到这个输出?[关闭]
Why do I get this output when I use escape sequence? [closed]
问:
我尝试研究转义序列,所以我正在测试,我认为光标移动到行的开头。\n
\r
\t
\r
我想打印:
hello
\r wokring \t working \n working
所以我在 Visual Studio 2022 中输入此代码
#include <iostream>
int main(void)
{
std::cout << "hello \n \\n working \r \\r working \t \\t working" << std::endl;
return 0;
}
但它打印:
hello
\r_working \t working
Web 编译器打印:
hello
\n working \r working \t working
为什么会这样?我有什么错吗?
答:
3赞
Atmo
11/5/2023
#1
\r
是回车(又名 CR)。\n
是换行符(又名 LF/换行符)。- 这两个字符最常在 Windows 上组合为(又名 CRLF,您可以通过常量在 VBA 中找到)。
\r\n
vbCRLF
正如那里所解释的那样,这在历史上总是有点混乱。
我们可以计算出您的字符串以弄清楚发生了什么:
hello \n \\n working \r \\r working \t \\t working
Hello
写完,然后转到下一行。\n working
,然后它回到行首。\r working
,然后写入 ,然后写入,但所有这些都会覆盖(因为光标返回到同一行的开头)。tab
\t working
\n working
我怀疑您的 Web 编译器无法在 Windows(可能是某些 Linux 发行版)上运行,因此结果不同。
评论
0赞
Thomas Matthews
11/6/2023
从历史上看,CR 将托架移动到左边距。LF 将纸张前进一行(不调整托架位置)。因此,为了到达下一行的左边距,将发出两个控制字符:CR、LF。'nix 程序员认为字符太多了,于是选择使用 LF 来创建他们的换行符。Windows 决定保留传统的回车换行符作为其换行符组合。这是历史。在电传打字机或 VT100 终端仿真器上尝试一下(我认为找到实际的终端并不容易)。
评论
\r
是一个回车符,在 *nix 环境(afaik,Web 环境可能正在使用)中没有任何特殊意义。 在 Windows 上转到行首,并将覆盖已经写在上面的内容。\r
\r
\033[G