常に「hello world」と表示されます。なんで?
#include <stdio.h>
int main(void)
{
printf("..... world\rhello\n");
return 0;
}
常に「hello world」と表示されます。なんで?
#include <stdio.h>
int main(void)
{
printf("..... world\rhello\n");
return 0;
}
これは\r
、キャリッジ リターン(CR) であるためです。キャレットを行頭に戻します。その後hello
、そこに書き込み、効果的にドットを上書きします。
\n
(改行、LF) 一方、キャレットを 1 行だけ下に移動するために使用されます。これが、テレタイプライターがシーケンス CR-LF、または次の行の先頭にキャレットを配置するための改行が続くキャリッジ リターンを持っていた理由です。 . Unix はこれを廃止し、LF は独自にこれを行うようになりました。ただし、CR は古いセマンティクスでまだ存在します。
youを使用すると、現在の行の先頭に戻り、ドット " "\r
が上書きされます。.....
printf("..... world\rhello\n");
^^^^^ vvvvv
hello <----- hello
使い方:
..... world
^
次に、現在の行の先頭に戻ります。
..... world
^
の後に単語を出力し\r
ます。結果は次のとおりです。
hello world
^
唯一の\r
(キャリッジ リターン) 文字により、端末は行を変更せずに行の先頭に戻るためです。したがって、 の左側の文字\r
は で上書きされ"hello"
ます。