为什么“\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
后跟与该行上的字符一样多的空格。
当我打印某行时,如果我想覆盖第一个字符,我使用 \r
因为是回车 return 字符但它只打印这个字符之后的一个字符,我的整行被覆盖。
这是我为这个问题做的一些代码。
#include <stdio.h>
int main(){
printf("-------");
printf("\r ");
return 0;
}
使用此代码我的输出是:</code> 和一个 space.</p>
<p>现在我稍微更改一下代码。唯一的变化是,在我的第二个 <code>printf
中,我删除了 \r
#include <stdio.h>
int main(){
printf("-------");
printf("\r");
return 0;
}
使用第二个代码我的输出是 "-------"
(不带引号)
我的预期输出:" ------"
为什么这不起作用?
\r
是马车 Return。它将 "carriage" (光标,在现代)发送回同一行的开头。它本身不会擦除任何东西——只是移动光标。显然你的终端有这样的行为,即在一行的开头打印一个字符会擦除该行的其余部分。我认为这并不能保证。
在许多系统上,如果您想清除当前行,您必须打印 \r
后跟与该行上的字符一样多的空格。