在字符串中使用\b
时。
int main (void)
{
printf("asdfhjk\bll");
return 0;
}
输出:
asdfhjll
在字符串的末尾使用\b
时。
int main (void)
{
printf("asdfhjkll\b");
return 0;
}
输出:
asdfhjkll
为什么最后一个字符l
没有被\b
删除。根据{{1}}的工作,\b
前面的字符被删除。在字符串的中间使用时,它可以正常工作,但在末尾使用时,则不能正常工作。为什么?
答案 0 :(得分:4)
字符\b
是一个退格字符。 它将光标向后移动一个位置,而无需在屏幕上写入任何字符。
请考虑您的第一个示例:asdfhjk\bll
。在“打印”退格字符之前,屏幕如下所示:
asdfhjk
^
...其中^
指示光标位置。并且在打印\b
之后,就完成了
asdfhjk
^
最后两个字符覆盖k
:
asdfhjll
^
对于第二个示例asdfhjkll\b
。在打印\b
之前:
asdfhjkll
^
及之后:
asdfhjkll
^
不会删除任何字符,但是光标已向后移了一个字符。如果您打印其他任何内容,则最后一个l
将被覆盖。
答案 1 :(得分:1)
\b
的意思是“将输出位置向后移动一个字符”。所以当你输出例如写入x\by
,x
,然后在刚刚写入的x
之前倒退输出游标,然后y
覆盖x
。
但是,当\b
之后没有输出时,光标仅停留在原处。然后,进一步的输出将覆盖最后写入的可见字符。