需要帮助了解\ n,\ b和\ r \ n将如何呈现printf输出

我在C中编写了以下程序,当我运行它时,我惊讶于查看输出。

这是该计划

int main() { printf("\nab"); printf("\bsi"); printf("\rha"); } 

输出是: – hai而我期待“absiha”,因为\ n是新行,\ b是退格(非擦除),\ r是回车。 所以我期待那个光标会处于“i”角色,因为\ r \ n已被应用但是当我运行它并看到输出时我感到非常惊讶和困惑。 有人可以解释一下输出吗?

让我们一步一步:

absiha

首先,处理退格。 请注意,即使它是“非擦除”,输出的下一个字符也会覆盖后退的字符:

asiha

现在,回车意味着回到行的开头。 所以“ha”覆盖了“asi”中的“as”:

hai

现在,光标当前位于i ,因此要输出的下一个字符将覆盖i

访问http://en.wikipedia.org/wiki/Escape_sequences_in_C

Escape Sequence Character \a Bell (speaker beeps) \b Backspace (non-erase) \f Form feed/clear screen \n New line \r Carriage Return \t Tab \v Vertical tab \\ Backslash \? Question mark \' Single quote \" Double quote \xnn Hexadecimal character code nn \onn Octal character code nn \nn Octal character code nn