8

それらの素晴らしいASCIIアート画像の1つを印刷したいとします。cout各行を個別に使用せずに、どうすればそれを実行できますか?

4

4 に答える 4

22

隣接する文字列リテラルは連結されているため、次のように実行できます。

cout << " _______________________ _______ _          _______         _______ _______  _______ _       _______         \n"
        "(  ____ \__   __/  ___  )  ____ \ \    /\  (  ___  )\     /|  ____ \  ____ )(  ____ \ \     (  ___  )\     /|\n"
        "| (    \/  ) (  | (   ) | (    \/  \  / /  | (   ) | )   ( | (    \/ (    )|| (    \/ (     | (   ) | )   ( |\n"
        "| (_____   | |  | (___) | |     |  (_/ /   | |   | | |   | | (__   | (____)|| (__   | |     | |   | | | _ | |\n"
        "(_____  )  | |  |  ___  | |     |   _ (    | |   | | (   ) )  __)  |     __)|  __)  | |     | |   | | |( )| |\n"
        "      ) |  | |  | (   ) | |     |  ( \ \   | |   | |\ \_/ /| (     | (\ (   | (     | |     | |   | | || || |\n"
        "/\____) |  | |  | )   ( | (____/\  /  \ \  | (___) | \   / | (____/\ ) \ \__| )     | (____/\ (___) | () () |\n"
        "\_______)  )_(  |/     \|_______/_/    \/  (_______)  \_/  (_______//   \__/|/      (_______/_______)_______)\n";

または、より正確には、おそらく:

cout << "                              .::/-                                                                                                                                                             \n"
        "                              .+++/                                                                                                                                                             \n"
        "                   `.::`       /+++.                                                                                                                                                            \n"
        "                  -////.      :+++-                                                                                                                                                             \n"
        "                    .////-`    .+++/`                                                                                                                                                           \n"
        "                    `:///:`   `/++/.                                                                                                                                                            \n"
        "            ..`        -////.   -+++:                                                                                                                                                           \n"
        "           :+++:-`      .////:` ./++/`                                                                                                                                                          \n"
        "          `-/+++++/-.    `:////.`:++/.                                                                                                                                                          \n"
        "             `.:/++++/:.`  -////..:--`                                                                                                                                                          \n"
        "                 .-/+++++/-..::.`                                                                                                                                                               \n"
        "       `:::-..``    `.:/++++-                                                                                                                                                                   \n"
        "       -++++++///:--.```.-/-                                                                                                                                                                    \n"
        "        `.--:///++++++//::.                                                                                                                                                                     \n"
        "`--.          ``..-::///+/``---                                                 -+-                                                             ./oso- /++:                                     \n"
        "-oo+  -::::----....````... `ooo                  :s-                            /mo                                                            -dmmhy:`hmmo                                     \n"
        "-oo+  /+++++++++++++++++/. `ooo                  om:                            /mo             ````     ```      ```    ``.``      ```  `.``  ommd`` `hmmo       ``.``    ```     ```     ```  \n"
        "-oo+  ...----::::////+++/` `ooo      `/ssyss+:`.ohmyoo` .+ssyss+-     -+syys+-  /mo    -o+.  .ohdmmdho- -hdd/   `sdds` :shmmmdy/`  .hddshdmmhoydmmmhy:`hmmo    .+hdmmmds- .ddd/   .ddh-   +ddh. \n"
        "-oo+  ```````````````````  `ooo     .yh-.``-/-  .sm/.` `/o-```-sd+  .sd+-..-++` /mo  .odo.  :dmmy+/smmm: +mmh-  /mmd- +mmh+:/smmy- .dmmdo/+s:`/ymmm++.`hmmo   .dmmh++smmd+`ommd` `ymmmy  .hmm+  \n"
        "-oo+  +oooooooooooooooooo- `ooo     -dy.         om:           -dy` +m/         /mo`+dy-   `smmy`  `smmy``smms`.hmm/ -dmd+---:hmmo`.dmm+       ommd   `hmmo   ommh.   ommh..ymm+ +mmdmm/ ommy.  \n"
        "-oo+  /++++++++++++++++++. `ooo      -oyhyyys/`  om:   `:osyyyyymy``sm-         /myhyhd:   `smms    +mmh` `dmm/smms  :dmmddddddddo`.dmm/       ommd   `hmmo   smmy`   /mmd. :dmd+dmy-ymd+hmd:   \n"
        "-oo+                       `ooo          ``.+do  om:   /do.    -dy``om:         /md/``od+` `ommh.  `ymmy`  :dmmmmy.  .hmd/`````.`  .dmm/       ommd    hmmo   +mmh-   smmy` `smmmmm- :dmmmmo    \n"
        "-oo+:::::::::::::::::::::::/ooo     -+:.```.od+  +mo.` /do.```.omy` .sd/.``.//` /mo    +dy. -ymmdysdmmh-    +mmmh-    :dmmyoosdd+` .dmm/       ommd    ommmso.`ymmdyshmmh:   .hmmm+   +mmmd`    \n"
        "-oooooooooooooooooooooooooooooo     ./syyyyyo:`  `:sys.`:syyyys+yo`  `:syyyyo:` :h/     :ys` `:shddhs/`     `ohy/      ./shddhy+-  .shh:       /hhy    `:syhs. `:oyhdhs/.     /hho`   `shh/     \n"

より賢明なことに、を使用してendlください。これは、出力ストリームもフラッシュするため、各行の後の「\n」とは微妙に異なります。

于 2010-02-02T01:40:10.243 に答える
10

次のようなものを試してください:

cout << R"(place multiple lines
           of text here
           and it will display exactly
           as you have it between the two brackets,
           line feeds and all.)";

...上記のコードを使用すると、バックスラッシュのような文字を2つ必要とせずに使用することもできます。すべてが表示され、\nなどの制御コードは認識されません。非常に便利です。

これは「文字列リテラル」と呼ばれ、C++11で追加されました。コマンドの詳細については、ここを参照してください。具体的には、raw_charactersのプレフィックス「R」を参照してください:https ://en.cppreference.com/w/cpp/language/string_literal

于 2016-01-12T07:21:13.720 に答える
2

他の人はすでにを使用することを提案していendlます。これは(必然的に)悪いことではありませんが、を使用するendlと、新しい行を書き込むとともにストリームのバッファがフラッシュされます。あなたが得た答えの1つにある意味とは反対に、を使用しても、改行をプラットフォームが行の終わりを示すために通常使用する文字シーケンスに変換するのに(まったく)役立ちendlません。の使用newlineは、と正確に同等であることが保証されていますstream << "\n" << flush;"。新しい行を「\r」、「\ n」、「\ r \ n」、またはプラットフォームが好むものに変換することは、別のレベルで行われ、それとnewlineは何の関係もありません。

flushただし、それによってI / Oが遅くなる可能性があります(多くの場合、遅くなります)。場合によってはかなりの差があります。数行(たとえば、数百文字)しか書いていない限り、それはおそらく完全に無関係です。ただし、大きなファイルを作成している場合は、endl代わりにを使用すると"\n"10倍の速度低下が発生する可能性があります(実際、iostreamが遅いという考えの多くは、を使用することに直接起因しますendl)。

それは、endlを使用する理由が決してないということではありません。flushストリームに書き込まれたものはすべて、標準ライブラリのバッファからすぐにフラッシュされ、OSに送信されることを保証します。endlすぐに表示できるようにしたい場合は、便利です。同様に、ロギングを行っていて、ログが常にプログラムの最新の既知の状態を反映することが重要である場合、endl書き込んだ内容が実際にログに記録され、バッファで失われないようにするのに(非常に)役立ちます。 /アプリケーションがクラッシュした場合。

したがって、endl時には理にかなっていますが、おそらくそれが使用される時間の95%は、本当に不適切です(たとえば、この質問への回答のいずれかで有用なことを達成する可能性は低いです)。

于 2010-02-02T02:44:51.473 に答える
-1

ありがたいことに、それはかなり簡単です。別の行を開始するときはいつでもendlを使用してください。

cout << stuff << endl
     << morestuff << endl
     << evenmorestuff << endl;

「\n」だけでなく「\r\ n」が必要なプラットフォームでも機能するはずなので、endlを使用する方がはるかに好きです。

于 2010-02-02T01:41:06.487 に答える