我有这样的C代码:

#include<stdio.h>
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

答案

\r是一个回车特点;

光标是渲染下一个字符的位置。

所以,打印一个\r允许覆盖终端仿真器的当前行。

汤姆·齐奇弄清楚为什么你的程序的输出是o world\r位于该行的末尾,之后您不会打印任何内容:

当程序退出时,shell 会打印命令提示符。o world

在线编译器 您提到的只是将原始输出打印到浏览器。\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;
}

它重复打印字符- \ | /在同一位置,给人一种旋转的错觉|在终端中。

来自: stackoverflow.com