为什么“ \ r”删除我以前的打印行,但“ \ r”却不删除

时间:2019-07-11 12:55:02

标签: c printf carriage-return

当我打印某些行时,如果要覆盖例如第一个字符,则使用\r,因为它是回车符,但在此字符之后仅打印一个字符,因此我的整个行都被覆盖。 / p>

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

#include <stdio.h>

int main(){

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

}

使用此代码,我的输出是:,带有一个空格。

现在,我更改一些代码。唯一的变化是在第二个printf后我删除了\r

后的空格
#include <stdio.h>

int main(){

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

}

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

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

为什么这不起作用?

1 个答案:

答案 0 :(得分:9)

\r是回车。它将“支架”(现代的游标)发送回同一行的开头。它本身不会擦除任何内容,只是移动光标。显然,您的终端的行为是在行的开头打印字符会删除其余的行。我想这不能保证。

在许多系统上,如果要清除当前行,则必须打印\r,后跟空格,直到该行上有字符为止。