web-dev-qa-db-ja.com

なぜ人々は文字列の先頭に「\ n」を置くのですか?

printf形式の文字列が\nで始まるCコードに入ることがよくあります。

printf( "\ nHello");

私の意見では、これは印刷に関して利点がない(むしろ多くの欠点がある)迷惑なものです"Hello\n"

  • 印刷された最初の行が'\n'で始まる場合、プログラム出力は(役に立たない)空の行で始まります
  • 最後に印刷された行が'\n'で終わらない場合、プログラム出力は新しい行で終わらない(端末で出力を読み取るときに便利)
  • ほとんどの端末(一般にラインバッファーストリーム)では、'\n'が検出されると出力がフラッシュされるため、'\n'で終わらない行が実際にprintf 'd(または、プログラムがクラッシュした場合など、ストリームがフラッシュされない場合は、おそらくない)

それで、なぜ人々はこれを好きですか?

8
peoro

通常、ステートメントが次の行に出力されるようにするために行われます。行末で行うと同じ効果が得られます。それは本当にほとんど重要ではありません。

更新:1つの方法を選択してそれを使い続ける限り、実際には1つの問題ではありません。本当に心配な場合は、すべてのステートメントを "\ nHello\n"と入力してください。いくつかの行をつなぎ合わせている場合、これは「バグ」を修正するのがそれほど難しくありません。戻って問題のステートメントを変更してください。

16

2つの言葉:個人的な好み。物事の壮大な計画では、これは本当に重要だとは思いません。あなたがそれに悩まされているなら、なぜこのように書くのか、このコードの作者に尋ねてください。あなたはいくつかの興味深い答えを得るかもしれません。

とにかく、各行の終わりにあるすべての改行文字を好みます。

5
Bernard

一部のコンテキストでこのイディオムを使用する人として-フラッシュを確実にするために通常\nを最後に配置しますが-正当化を提供できます。特に、空の行で始まる場合、これを使用して多くの行をフォーマットする傾向があります、\nsが揃うようにします。つまり、(a)すべての行に実際に\nが含まれていることを確認するか、(b)バラストとして無視して、行のテキストを読み取るだけの方がいくらか簡単です。このような状況では、実際には私にも見栄えがしますが、これらのメリットはすべてマイナーです。

構文バラストを最小限に抑える別のアプローチは、改行を含む文字列リテラルを使用することですが、- C11標準 の6.4.5はそれらを禁止しているため、コンパイラーに適切に話し、それが何になるかについて慎重に考える必要があります行う。

4
PJTraill

(見逃さない限り)言及されていない理由は、一部のCLIプログラムが '\ r'を使用して行を繰り返し更新するためです。たとえば、ステータス付き。

次の行では、カーソルを次の(新しい)行に移動するために改行が必要になります。

別の(非常に悪い)例は、プログラマーが複数のプログラムが同じ端末に書き込んでいる可能性があることを認識している場合です。この無秩序なケースでは、追加の書き込みの前に、バッファされたテキストをフラッシュし、書き込みの出力をスクランブルする可能性があるため、先頭の「\ n」によって何らかの順序が課される可能性があります。しかし、そのような順序付けは保証されておらず、遅かれ早かれ、他のプロセスが介入して物事を台無しにするでしょう。母親に自慢したいことにはこれをしないでください。

上記の例をデバッグ目的で使用し、自分以外のユーザーに結果を知らせないようにします。これは、同じ(できればデバッグ)ファイルに書き込む複数の非同期タスクにも当てはまります。

ただし、 '\ r'を使用して画面上のテキスト行を上書きするケースは、CLIの世界では珍しくありません。

結局のところ、何かが起こります。

3
Hugh Buntu