• ベストアンサー

C++の改行を表すコマンド

C++の勉強を始めたばかりなのです。 出力のコマンドで、改行は「endl」と「\n」の両方が使えるようですが、この2つの違いや使い分けはどのようにすればよいのですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • freetaka
  • ベストアンサー率53% (106/197)
回答No.1

「\n」は改行のみ 「endl」は改行+バッファのフラッシュ という動作をします C言語を知っている上でC++をおぼえようとしているのであれば 説明しやすいのですが簡単に説明すると #include <iostream.h> int main() { cout << "Hello world!!" << endl; cout << "Hello world!!" << endl; return 0; } というコードがあるとしたら endlのたびに「Hello world!!」が出力されるという動作になります 何も考えなければこちらのほうが高速に結果を得られます #include <iostream.h> int main() { cout << "Hello world!!\n"; cout << "Hello world!!\n"; return 0; } のほうではcout行2つを解釈した上での出力となります 複雑なプログラムになれば 頻繁にフラッシュを行うと速度が遅くなるという現象もでたりしますが そのうちC++でのプログラミングになれてくれば これらの使い分けもできるようになると思います C++のほうは基本的に結果を得るのに高速な「endl」でOKです

okamonta
質問者

お礼

ありがとうございました

その他の回答 (2)

  • oldman50
  • ベストアンサー率29% (8/27)
回答No.3

'\n'は「改行文字」を表します。 一方、endlは、マニピュレータと呼ばれるストリーム状態操作関数のうちの一つで、ストリームに改行を出力した後、更にflushという別のマニピュレータを実行して、バッファの内容をフラッシュするものです。 cout << "ABC" << '\n'; ・・・(1)文字列ABCの後に改行を出力する cout << "ABC" << endl; ・・・(2)文字列ABCの後に改行を出力してフラッシュする 標準出力に出力する場合は、'\n'を出力すると自動的にフラッシュされるので、この二つの効果は同じです。 '\n'は関数ではなくて単なる文字ですから、(1)と同じことを cout << "ABC\n"; のように書くことも出来ます。しかし、 cout << "ABCendl"; とは書けません。endlは文字ではなく、「ストリーム状態」を操作する関数だからです。

okamonta
質問者

お礼

ありがとうございました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

std::endlは、std::basic_ostreamに対してしか使えません。 他の状況で改行文字を扱いたい場合は、'\n'を使うしかありません。 例えば、std::stringに改行文字を追記したい場合... std::string str("abc"); str.push_back('\n'); のように、'\n'を使うしかなく、この文脈ではstd::endlは使えません。

okamonta
質問者

お礼

ありがとうございました

関連するQ&A

  • c++の改行ができません。

    cの勉強はせず、c++の勉強を始めたばかりです。 以下のソースコードでコンパイルは通るのですが、実行すると¥nによる改行が起こりません。 #include <iostream> using namespace std; int main() { cout << "Hello¥n"; cout << "abc"; return 0; } 次のように出力されます。 Hello¥nabc(コンピュータ名):(ディレクトリ名) (ユーザ名)$ ちなみに OS:OS10.8 コンパイラ:gcc4.7.2 エディタ:emacs24.2 実行ソフト:terminal です。 また、gccとemacsはmacportsにより導入しました。 分かる方回答よろしくお願いします。

  • 改行コードについて

    phpで開発をしています。 テキストファイルに文字列を出力する際に、改行コードを扱う以下のような場合について、 ①$str='ab\ncd'; ②$str="ab\ncd"; ①の変数の内容を出力すると\nがそのまま出力されます。 ②の変数の内容を出力すると改行されて出力されます。 質問ですが、この二つの違いについては、 ①のときは\nという文字として出力された。 ②のときは改行コードとして出力された。 (バイトコードで見ると、二つのコードは違っている?) という認識で良いのでしょうか。 ご教示いただけますと幸いです。

    • ベストアンサー
    • PHP
  • 【C#】文字列の最後に改行を入れていく処理

    【C#】文字列の最後に改行を入れていく処理 C#初心者です。 ファイルを一行読み込むごとに、行の最後に改行\nを入れ、最後にその文字列を繋げ、出力したいのですが、やり方がわかりません。 結果は abcdefg hijklmn opqrstu のようになってほしいです。 分かる方いらっしゃいましたら教えていただけると幸いです。 宜しくお願いいたします。

  • 改行コードについて

    改行コードがよく解らないので説明お願いします 様々なサイトの改行コードの説明で LinuxはLF MacはCR WindowsはCRLFと説明しています 私の認識では LF=\n CR=\r CRLF=\r\n だと思っていました ここで疑問なのですが 確かに私の利用した環境ではLinuxの改行コードは\n, Windwosの改行コードは\r\nでした ところがMacの標準のメモ帳(テキストエディット)で文字を入力しても改行コードは\nです 確認方法は od -cというコマンドとfileというコマンドです これはつまりCRではなくLFということですよね? では、なぜ多くのサイトではMacはCRと説明しているのでしょうか? そもそもCR=\rという認識が間違ってるのでしょうか? よろしくお願いします

  • lsコマンドについて。

    lsコマンドについて。 $lsを実行したときに、結果は各ファイル名が改行で区切られて出力されると思うのですが、コンソールにはスペースかタブで区切られているように表示されます。 これはシェルがlsコマンドの結果に含まれる改行をスペースなどに変えてコンソールに出力しているからなのでしょうか。 よろしくお願いします

  • dig/host/nslookup コマンドの違い

    Linuxを勉強中です。いつもお世話になります。 dig/host/nslookup コマンドの違いについて、使い分けの理解ができません。 どういう使い分けをするのでしょうか。 どうぞ宜しくお願い致します。

  • Javaでの改行コード

    Javaでファイル出力をしたいのですが、 改行コードを「\n」にしたところ「・」が入ってしまいました。 「・」が入らないような改行コード、あるいは なにか良い対策案を教えて下さい。

    • ベストアンサー
    • Java
  • xcodeで改行が。。

    xcodeを使ってCプログラミングをしているのですが、改行の時に?nと打つとそのまま?nと表示されてしまいます。バックスラッシュを他のページからコピペしてくると改行できるのですが、はじめから?nで改行できるようにするか,バックスラッシュを打てるようにするにはどうしたら良いのでしょうか?? OSは10.3を使っています。 ↑文中のはてなマークは円マークです。

    • ベストアンサー
    • Mac
  • 改行コードと出力

    今日授業で改行コードについて習ったんですが\nはわかります。 printf("zz\n");や putchar('\n');などで使えば改行になります。 意味がわからないのはCRLFという改行コードのことです。 これはどのようにして使用するのでしょうか? printf("zzCRLF")としても全然改行にならないのですが・・ 後出力画面に\\ と \"に出力する方法がわかりません。 printf("\\");としても\1個だけ printf("\\\");とすればエラーがでます。

  • [C++]ファイル出力について

    教えてください。 コマンドプロンプトから何行か書いた文章をファイルにしたいのですが、 うまくいきません。 作ったものの結果は1行1文字で出力されて、eofでうまく 終わってくれません。 コマンドプロンプトで入力(改行)された通りにファイルに出力 できるようにしたいので、どこがおかしいのか指摘お願いします。 #include <iostream> #include <fstream> #include <stdlib.h> #include <string.h> #include <string> using namespace std; int main(int argc, char *argv[]) { char str[100]; int i; i = 0; if (argc <= 1) { cerr << "Need filename" << endl; exit (1); } ifstream ifs(argv[1], ios::in); if (ifs) { cerr << "Caution" << argv[1] << " already exists " << endl; cerr << " Specify a different filename " << endl; exit (2); } ofstream ofs(argv[1], ios::out); if (!ofs) { cerr << " Unable to write to " << argv[1] << endl; exit (3); } while(str[i] !=EOF) { cin >> str[i]; ofs << str[i] << endl; i++; } return 0; }