我是C编程语言的初学者,最近我研究过转义序列。
\n means newline
\b means backspace
\r means carriage-return
当我在以下程序中应用这些时,我的输出为 hai ,任何人都可以解释,如何?
main()
{
printf("\nab");
printf("\bsi");
printf("\rha");
}
答案 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
,它将替换前两个字符,并将最终字符串作为hai
(ha
从最后一个语句开始来自早期结果的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)
在您的代码中
<强> \ 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
首先,处理退格。请注意,即使它是“非擦除”,输出的下一个字符也会覆盖后退的字符:
<new line>asi<carriage return>ha
现在,回车意味着回到行的开头。所以“ha”会覆盖“asi:
中的”as“<new line>hai
现在,光标当前位于i上,因此要输出的下一个字符将覆盖i。