为什么“\r”删除了我以前打印的行但“\r”却没有

Why "\r " deletes my previous printed line but "\r" it doesn't

当我打印某行时,如果我想覆盖第一个字符,我使用 \r 因为是回车 return 字符但它只打印这个字符之后的一个字符,我的整行被覆盖。

这是我为这个问题做的一些代码。

#include <stdio.h>

int main(){

    printf("-------");
    printf("\r ");
    return 0;

}

使用此代码我的输出是:</code> 和一个 space.</p> <p>现在我稍微更改一下代码。唯一的变化是,在我的第二个 <code>printf 中,我删除了 \r

之后的 space
#include <stdio.h>

int main(){

    printf("-------");
    printf("\r");
    return 0;

}

使用第二个代码我的输出是 "-------"(不带引号)

我的预期输出:" ------"

为什么这不起作用?

\r 是马车 Return。它将 "carriage" (光标,在现代)发送回同一行的开头。它本身不会擦除任何东西——只是移动光标。显然你的终端有这样的行为,即在一行的开头打印一个字符会擦除该行的其余部分。我认为这并不能保证。

在许多系统上,如果您想清除当前行,您必须打印 \r 后跟与该行上的字符一样多的空格。