c ++-'\ r'转义序列的用途是什么?
我有这样的C代码:
#include
int main()
{
printf("Hey this is my first hello world \r");
return 0;
}
我已使用\r转义序列作为实验。 运行代码时,输出为:
o world
这是为什么,\r的用途是什么?
如果我在在线编译器中运行相同的代码,则输出为:
Hey this is my first hello world
为什么在线编译器忽略\r而产生不同的输出?
8个解决方案
83 votes
-是回车符; 它告诉您的终端仿真器将光标移动到行首。
光标是下一个字符将被渲染的位置。
因此,打印-可以覆盖终端仿真器的当前行。
Tom Zych弄清楚了为什么程序的输出是-而\在该行的末尾,并且此后您什么也不打印的原因:
程序退出时,外壳程序将显示命令提示符。 终端将其呈现在光标离开的位置。 您的程序将光标留在行的开头,因此命令提示符部分覆盖了您打印的行。 这解释了为什么您看到命令提示符后跟-的原因。
您提到的在线编译器仅将原始输出打印到浏览器。 浏览器将忽略控制字符,因此-不起作用。
这是-的用法示例:
#include
#include
int main()
{
char chars[] = {'-', '\\', '|', '/'};
unsigned int i;
for (i = 0; ; ++i) {
printf("%c\r", chars[i % sizeof(chars)]);
fflush(stdout);
usleep(200000);
}
return 0;
}
它将在同一位置重复打印字符- \ | /,从而给终端带来旋转|的错觉。
Arnaud Le Blanc answered 2020-01-04T01:50:28Z
23 votes
程序正在打印"Hey this is my first hello world ",然后将光标移回该行的开头。 这在屏幕上的外观取决于您的环境。 字符串的开头似乎被某些内容覆盖,也许是您的命令行提示符。
Tom Zych answered 2020-01-04T01:50:49Z
8 votes
'\ r'代表“回车”-它是打字机和非常老的打印机时代的延续。 最好的示例是在Windows和其他DOSsy操作系统中,其中的换行符为“ \ r \ n”。 这些是发送给旧打印机以开始新行的指令:首先将打印头移回起点,然后向下移动。
不同的操作系统将使用其他换行序列。 Linux和OSX仅使用'\ n'。 较旧的Mac OS仅使用'\ r'。 Wikipedia有更完整的列表,但是这些是重要的列表。
希望这可以帮助!
PS:至于为什么会得到奇怪的输出...也许控制台正在将“光标”移回该行的开头,然后用空格或summat覆盖第一位。
Xavier Holt answered 2020-01-04T01:51:23Z
6 votes
\n将光标移动到该行的开头。
换行符在不同系统上的管理方式不同。 有些仅使用\n(换行,例如Unix),有些使用(\r,例如OS X afaik之前的MacOS),有些仅使用\r\n(例如Windows afaik)。
Nornagest answered 2020-01-04T01:51:48Z
2 votes
正如amaud576875所说,\r的转义序列表示回车,类似于按Enter键。 但是,我不确定你如何获得“世界”。 您应该(而且我也应该)获得“我的第一个问候世界”,然后换行。 根据您使用的操作系统(我使用的是Mac),您可能希望使用\n而不是\r。
wchargin answered 2020-01-04T01:52:08Z
2 votes
这来自于过时的技术:打印机的老式打字机样式。 有一个使纸张前进的滚筒(压纸卷轴)和一个将金属键锤击在墨水织物上的打印头。
\ r将打印头返回左侧。
\ n将压板前进一行。
如果未发出\ n,您将键入一行上的内容(主要用于下划线文本)。
Steve Wellens answered 2020-01-04T01:52:41Z
2 votes
要回答您的问题部分,
\r有什么用?
许多Internet协议(例如FTP,HTTP和SMTP)都是用回车符和换行符分隔的行指定的。 因此,例如,在发送电子邮件时,您可能具有以下代码:
fprintf(socket, "RCPT TO: %s\r\n", recipients);
或者,当FTP服务器回复权限被拒绝的错误时:
fprintf(client, "550 Permission denied\r\n");
Toby Speight answered 2020-01-04T01:53:15Z
1 votes
当您在unix平台上运行并且需要创建文本文件时,它非常有用。它将在dos平台上打开。
Unix使用'\ n'作为其行终止符,而dos使用'\ r \ n'作为其行终止符,因此您可以使用它来创建一个dos文本文件。
EvilTeach answered 2020-01-04T01:53:40Z