tra*_*ank 12 c language-lawyer
我在C中编写了以下程序,当我运行它时,我惊讶于查看输出.
这是程序
int main()
{
printf("\nab");
printf("\bsi");
printf("\rha");
}
Run Code Online (Sandbox Code Playgroud)
输出是: - hai而我期待"absiha",因为\n是新行,\ b是退格(非擦除),\ r是回车.所以我期待那个光标会处于"i"角色,因为\ r已经被应用但是当我运行它并看到输出时我感到非常惊讶和困惑.有人可以解释一下输出吗?
Izk*_*ata 21
让我们一步一步:
<new line>ab<backspace>si<carriage return>ha
首先,处理退格.请注意,即使它是"非擦除",要输出的下一个字符也会覆盖退格的内容:
<new line>asi<carriage return>ha
现在,回车意味着回到行的开头.所以"ha"覆盖了"asi:"中的"as":
<new line>hai
现在,光标当前位于i,所以要输出的下一个字符将被覆盖i.
前往http://en.wikipedia.org/wiki/Escape_sequences_in_C
Escape Sequence Character
\a Bell (speaker beeps)
\b Backspace (non-erase)
\f Form feed/clear screen
\n New line
\r Carriage Return
\t Tab
\v Vertical tab
\\ Backslash
\? Question mark
\' Single quote
\" Double quote
\xnn Hexadecimal character code nn
\onn Octal character code nn
\nn Octal character code nn