转义序列在C中产​​生意外的输出

我是C编程语言的初学者,最近我研究了转义序列

\n means newline \b means backspace \r means carriage-return 

当我在下面的程序中应用这些时,我就得到输出为hai ,任何人都可以解释一下,怎么样?

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

\r实际上是回车符(它将光标移到行的开头)。

你的程序输出一个新行( \n ),然后是“ab”,然后退格( \b )(在b上)“si”,所以你现在在屏幕上有“asi”。
\r将光标移动到行的开头,然后输出“ha”,在屏幕上留下“hai”。

第一条指令将在新行上打印ab\n ):

 >ab 

第二条指令在打印si之前会产生退格\b ):

 >asi 

然后最后一个将在打印之前返回回车符\r ):

 >hai 

首先printf将打印ab然后\b将进行退格并打印si以便最终打印成为asi

现在在最后\r将光标移动到开头并打印ha将替换前两个字符并使最终字符串为haiha来自最后一个语句,而i来自之前的结果。)

因为你在第一个\n之后在同一行写了所有内容:

  printf( "\nab" ); // -> ab on a new line 

线路状态: ab

  printf( "\bsi" ); 

这意味着ab减去b因为退格,然后你将si添加到该行。

线路状态: asi

最后:

  printf( "\rha" ); 

意味着你回到行的开头写ha

它导致了hai


\r回车 ,而不是换行

不, '\r' 不是换行符, '\n'实际上是换行符。 恰好是许多现代系统使用'\n'作为换行和回车,使其成为“换行符”。

'\r'回车符 ,它将光标返回到行的开头。

\ b用于退格。 也就是说,它删除了刚才写的字符。
\ r \ n是将光标返回到当前行中最左侧的位置。

设z表示光标。
声明之后。

 \n abz 

退格后。

 az 

声明二后。

 asiz 

回来后。

 zbi 

声明三后

haiz

在你的代码中

  1. \ r

     \r means Carriage Return, which means: return the cursor to the beginning of the line in more simple words we can say that it's deleting each character from the active position upto the beginning. 
  2. \ n

     \n mean New Line 
  3. \ b

     \b mean Backspace 

让我们一步一步:

 absiha 

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

 asiha 

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

 hai 

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