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

时间:2013-08-07 08:43:23

标签: c

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

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

当我在以下程序中应用这些时,我的输出为 hai ,任何人都可以解释,如何?

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

7 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:5)

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

>ab

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

>asi

然后最后一个将在打印\r之前进行回车ha):

>hai

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

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

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

线路状态:ab

 printf( "\bsi" );

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

线路状态:asi

最后:

 printf( "\rha" );

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

导致hai


\r 回车,而非换行

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

  

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


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

\n
abz

退格后。

az

在陈述二之后。

asiz

回来后。

zbi

声明三后

haiz

答案 6 :(得分:0)

在您的代码中

  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
    
  4. 让我们一步一步:

    <new line>ab<backspace>si<carriage return>ha
    

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

    <new line>asi<carriage return>ha
    

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

    中的”as“
    <new line>hai
    

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