为什么以及如何出现涉及回车的以下输出?

aro*_*nav 4 c gcc output

#include <stdio.h>

void main()
{
    printf("ab");
    printf("\bsi");
    printf("\rha");
}
Run Code Online (Sandbox Code Playgroud)

此代码在GCC 4.8编译器上提供"ha"的输出

#include <stdio.h>

void main()
{
    printf("ab");
    printf("\bsi");
    printf("\rha");
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

此代码在GCC 4.8编译器上提供"hai"的输出

现在的问题是为什么在添加语句printf("\n")时输出从"ha"变为"hai"; 最后(根据我)不应该因前面的行而影响代码.

Gre*_*ill 5

程序结束时,shell会从光标最后的任何位置开始写入提示.所以在第一种情况下,之后\rha,光标就坐在了i.i无论你的提示的第一个字符是什么,shell都会覆盖.

在第二种情况下,\n在末尾输出a ,将光标移动到下一行,shell在其中写入其提示.