转义序列在C语言中产生了意外的输出
我是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”
\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 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 mean New Line
\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。您的假设可能不正确,并且输出可能会有所不同,请参阅