4

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

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

当我在以下程序中应用这些时,我得到的输出为hai,谁能解释一下,如何?

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

7 回答 7

13

\r实际上是回车(将光标带到行首)。

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

于 2013-08-07T08:46:28.307 回答
5

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

>ab

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

>asi

然后最后一个将在打印前回车( ) :\rha

>hai
于 2013-08-07T08:47:20.250 回答
4

首先printf将打印ab,然后\b将退格并打印si,因此您的最终打印变为asi.

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

于 2013-08-07T08:46:54.087 回答
3

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

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

线路状态:ab

 printf( "\bsi" );

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

线路状态:asi

最后 :

 printf( "\rha" );

意味着你回到行首并写ha.

它导致hai.


\r回车,而不是行。

于 2013-08-07T08:48:01.810 回答
2

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

'\r'回车,它将光标返回到行首。

于 2013-08-07T08:46:52.253 回答
1

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


让 z 代表光标。
在声明一之后。

\n
abz

退格后。

az

在陈述二之后。

asiz

回来后。

zbi

声明三之后

haiz

于 2013-08-07T08:49:29.510 回答
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
    

让我们一步一步来:

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

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

<new line>asi<carriage return>ha

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

<new line>hai

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

于 2013-08-07T09:18:26.650 回答