\r
是一个carriage return字符;它告诉您的终端仿真器在行首移动光标.
cursor是下一个字符的渲染位置.
因此,打印\r
允许覆盖终端仿真器的当前行.
Tom Zych表示为什么您的程序的输出是o world
,而\r
在行尾,并且您在这之后不打印任何内容:
当程序退出时,shell打印命令提示符.终端会在光标离开的位置渲染它.程序将光标保留在行的开头,因此命令提示会部分覆盖打印的行.这解释了为什么命令提示符后面跟着o world
.
您提到的online compiler只是将原始输出打印到浏览器.浏览器会忽略控制字符,因此\r
无效.
见https://en.wikipedia.org/wiki/Carriage_return
以下是\r
的用法示例:
#include <stdio.h>
#include <unistd.h>
int main()
{
char chars[] = {'-', '\\', '|', '/'};
unsigned int i;
for (i = 0; ; ++i) {
printf("%c\r", chars[i % sizeof(chars)]);
fflush(stdout);
usleep(200000);
}
return 0;
}
它在同一位置重复打印字符-
\
|
/
,以产生终端中旋转|
的错觉.