转义序列在C语言中产生了意外的输出

转义序列在C语言中产生了意外的输出,c,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”

我是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”。否,
'\r'
不是换行符,
'\n'
实际上是换行符。恰好是这样,许多现代系统使用
'\n'
作为换行符和回车符,使其成为“换行符”


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

首先
printf
将打印
ab
,然后
\b
将退格并打印
si
,这样您的最终打印将成为
asi


现在,在最后一个
\r
中,将光标移到开头并打印
ha
,这将替换前两个字符,并使最后一个字符串成为
hai
ha
来自上一个语句,而
i
来自早期结果。)

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

第二条指令将在打印
si
之前进行退格(
\b
):

>asi
然后,最后一个将在打印前进行回车
\r
ha

>hai

因为您在第一个
\n
之后的同一行上写入所有内容:

>ab
 printf( "\nab" ); // -> ab on a new line
线路状态:
ab

 printf( "\bsi" );
它的意思是
ab
减去
b
,因为退格,然后将
si
添加到行中

线路状态:
asi

 printf( "\bsi" );
最后:

 printf( "\rha" );
这意味着您返回到行首并写入
ha

它导致
hai


\r
是回车,而不是换行

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


让z代表光标。
在陈述一之后

\n
abz
退格后

az
在陈述二之后

asiz
回来后

zbi
在陈述三之后

haiz

在您的代码中

  • \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.
    
  • \n

    \n mean New Line
    
  • \b

    \b mean Backspace
    
  • 让我们一步一步来:

    <new line>ab<backspace>si<carriage return>ha
    
    absiha
    
    首先,处理退格。请注意,即使是“非擦除”,下一个要输出的字符也会覆盖退格的内容:

    <new line>asi<carriage return>ha
    
    asiha
    
    现在,回车意味着返回到行的开头。因此“ha”覆盖了“asi”中的“as”:

    hai
    

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

    您的假设可能不正确,并且输出可能会有所不同,请参阅