在C ++中,如何将ASCII艺术打印到控制台?

时间:2010-02-02 01:37:46

标签: c++ command-line-interface ascii-art

假设你想要打印出那些伟大的ASCII艺术图像之一。如果不单独使用cout每行,怎么办呢?

4 个答案:

答案 0 :(得分:16)

连接相邻的字符串文字,因此您可以这样做:

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”略有不同,因为您还将刷新输出流。

答案 1 :(得分:5)

尝试类似:

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.)";

...上面的代码也允许你使用反斜杠\等字符而不需要其中的两个,它会显示所有内容并且无法识别控制代码,例如\ n等非常方便。

答案 2 :(得分:2)

其他人已经建议使用endl。虽然这不是(必然)坏事,但使用endl刷新流的缓冲区并写入换行符。与你得到的其中一个答案的含义相反,使用endl使用而不是帮助(根本没有)将新行转换为平台通常用于发出信号的任何字符序列一行的结尾。使用newline保证与stream << "\n" << flush;"完全等效。将新行翻译为“\ r”,或“\ n”或“\ r \ n”,或平台所喜欢的任何内容,都是在不同的级别上进行的,而newline与它无关。

然而,它所做的flush可以(并且经常会)减慢您的I / O速度,有时甚至相当大。只要您只写几行(例如几百个字符),它可能完全无关紧要。但是,如果你要写一个大文件,使用endl代替"\n"很容易造成10倍的放缓(事实上,我甚至可以说大部分的想法都是iostreams直接来自endl)。

这并不是说从来没有任何理由使用endl。 flush确保已经写入流的任何内容立即从标准库的缓冲区中刷出,并发送到操作系统。如果您想确保立即显示,endl可能很有用。同样,如果您正在进行日志记录,并且您的日志始终反映最近已知的程序状态至关重要,endl可以(非常)有用,以确保您所写的内容真正被记录,而不是当/如果应用程序崩溃时丢失在缓冲区中。

所以,endl有时是有道理的,但可能有95%的时间使用它,这是非常不合适的(例如,它不可能在这个问题的任何答案中完成任何有用的东西)。

答案 3 :(得分:0)

谢天谢地,这很简单。只要你想开始另一行,就使用endl。

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

我想说我更喜欢使用endl,因为即使你在一个需要“\ r \ n”而不仅仅是“\ n”的平台上它也应该工作。