51

\b并且\r在实践中很少使用。我刚刚发现我误解了这两个转义序列。一个简单的测试:

printf("foo\bbar\n");

我希望它输出fobar,因为\b会退格光标,并b会覆盖第二个o,而是输出:foobar

同样是\r

printf("foo\rbar\n");

我以为\r会将光标移动到当前行的开头,所以bar会替换foo,所以最终输出应该是bar. 但是,它实际上输出:

foo
bar
4

6 回答 6

59

字符将像这样发送到底层输出设备(在您的情况下可能是终端仿真器)。

这取决于终端的实现,然后这些字符如何实际显示。例如,铃声 ( \a) 可能会在某些终端上触发哔声,在其他终端上会触发屏幕闪烁,或者将被完全忽略。这完全取决于终端的配置方式。

于 2013-06-21T13:23:12.003 回答
12

这些字符与文档中的字符完全相同 -等同于和\b的字符代码。不同的是您的操作系统如何对这些字符做出反应。当显示器试图模拟旧的电传打字机时,这些操作是标准化的,但它们在现代环境中的用处不大,并且不能保证兼容性。0x08\r0x0d

于 2013-06-21T13:25:26.877 回答
5

退格和回车字符的解释留给您用于显示的软件。终端仿真器在显示 \b 时会将光标向后移动,而在显示 \r 时会将光标移至行首。如果您将这些字符打印在其他地方,例如文本文件,软件可能会选择。做别的事情。

于 2013-06-21T13:28:41.337 回答
1

我已经尝试了许多反斜杠转义字符。\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;
}

于 2017-08-30T04:32:56.517 回答
1

至于 C Primer Plus 中描述的每个字符的含义,您期望的是一个“正确”的答案。对于某些计算机体系结构和编译器来说应该是正确的,但不幸的是不是你的。

我编写了一个简单的 c 程序来重复您的测试,并得到了“正确”的答案。我使用的是 Mac OS 和 gcc。 在此处输入图像描述

另外,我很好奇您使用的编译器是什么。:)

于 2018-04-25T02:10:46.143 回答
1

在不同的编译器中,反斜杠转义字符的行为不同。

在带有 clang 的 MAC OS 中,\b如您所料,从控制台中取出最后一个字符。

#include <iostream>
int main ()
{
  std::cout << "Test";
  std::cout << "\b";
  std::cout << "\n";
  return 0;
}

输出:

 Tes
于 2021-12-10T16:36:00.733 回答