在C中使用\ b和\ r \ n

时间:2013-06-21 13:17:16

标签: c

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

printf("foo\bbar\n");

我希望它输出fobar,因为\b会反射光标,而b会覆盖第二个o,而是输出:{{1} }

foobar相同:

\r

我认为printf("foo\rbar\n"); 会将光标移动到当前行的开头,因此\r将替换bar,因此最终输出应为foo。但是,它实际输出:

bar

5 个答案:

答案 0 :(得分:52)

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

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

答案 1 :(得分:9)

字符与文档完全一致 - \b等同于0x08\r的字符代码等同于0x0d。不同的是你的操作系统对这些角色的反应。当显示器试图模拟旧的电传打字机时,这些操作是标准化的,但它们在现代环境中不太有用,并且不能保证兼容性。

答案 2 :(得分:4)

退格和回车字符的解释留给您用于显示的软件。终端仿真器,当显示\ b时会将光标向后移动一步,并将\ r \ n显示在行的开头。如果您在其他地方打印这些字符,如文本文件,则软件可以选择。做其他事。

答案 3 :(得分:0)

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

答案 4 :(得分:-2)

至于C Primer Plus中描述的每个角色的含义,你所期望的是一个“正确”的答案。对于某些计算机体系结构和编译器应该是这样,但遗憾的是不是你的。

我写了一个简单的c程序来重复你的测试,得到了'正确'的答案。我使用的是Mac OS和gcc。 enter image description here

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