web-dev-qa-db-ja.com

\ n、\ b、および\ rがprintf出力をどのようにレンダリングするかを理解するのに助けが必要

私はCで次のプログラムを作成しましたが、それを実行すると、出力を見て驚いた。

これがプログラムです

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

出力は:-haiですが、\ nは改行用、\ bはバックスペース(非消去)用、\ rはキャリッジリターン用であるため、「absiha」を期待していました。したがって、\ rが適用されているため、cursonが「i」文字になると予想していましたが、それを実行して出力を見ると、完全に驚き、混乱しました。誰かが私に出力を説明できますか?

12
trapaank

一度に一歩ずつ進んでいきましょう。

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

まず、バックスペースを処理します。 「非消去」であっても、次に出力される文字は、バックスペースされたものを上書きすることに注意してください。

<new line>asi<carriage return>ha

ここで、キャリッジリターンとは、行の先頭に戻ることを意味します。したがって、「ha」は「asi」の「as」を上書きします。

<new line>hai

現在、カーソルはiにあるため、次に出力される文字はiを上書きします。

20
Izkata

訪問 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

5
ridox