\b
并且\r
在实践中很少使用。我刚刚发现我误解了这两个转义序列。一个简单的测试:
printf("foo\bbar\n");
我希望它输出fobar
,因为\b
会退格光标,并b
会覆盖第二个o
,而是输出:foobar
同样是\r
:
printf("foo\rbar\n");
我以为\r
会将光标移动到当前行的开头,所以bar
会替换foo
,所以最终输出应该是bar
. 但是,它实际上输出:
foo
bar
\b
并且\r
在实践中很少使用。我刚刚发现我误解了这两个转义序列。一个简单的测试:
printf("foo\bbar\n");
我希望它输出fobar
,因为\b
会退格光标,并b
会覆盖第二个o
,而是输出:foobar
同样是\r
:
printf("foo\rbar\n");
我以为\r
会将光标移动到当前行的开头,所以bar
会替换foo
,所以最终输出应该是bar
. 但是,它实际上输出:
foo
bar
字符将像这样发送到底层输出设备(在您的情况下可能是终端仿真器)。
这取决于终端的实现,然后这些字符如何实际显示。例如,铃声 ( \a
) 可能会在某些终端上触发哔声,在其他终端上会触发屏幕闪烁,或者将被完全忽略。这完全取决于终端的配置方式。
这些字符与文档中的字符完全相同 -等同于和\b
的字符代码。不同的是您的操作系统如何对这些字符做出反应。当显示器试图模拟旧的电传打字机时,这些操作是标准化的,但它们在现代环境中的用处不大,并且不能保证兼容性。0x08
\r
0x0d
退格和回车字符的解释留给您用于显示的软件。终端仿真器在显示 \b 时会将光标向后移动,而在显示 \r 时会将光标移至行首。如果您将这些字符打印在其他地方,例如文本文件,软件可能会选择。做别的事情。
我已经尝试了许多反斜杠转义字符。\n
这是一个新的换行符,可以放在任何地方来带来效果。使用此字符时要记住的一件重要事情是,我们使用的机器的操作系统可能会影响输出。例如,我打印了一堆转义字符并显示结果如下,以证明操作系统会影响输出。
代码:
#include <stdio.h>
int main(void){
printf("Hello World!");
printf("Goodbye \a");
printf("Hi \b");
printf("Yo\f");
printf("What? \t");
printf("pewpew");
return 0;
}
在不同的编译器中,反斜杠转义字符的行为不同。
在带有 clang 的 MAC OS 中,\b
如您所料,从控制台中取出最后一个字符。
#include <iostream>
int main ()
{
std::cout << "Test";
std::cout << "\b";
std::cout << "\n";
return 0;
}
输出:
Tes