В C ++, как распечатать ASCII art на консоль? - PullRequest
6 голосов
/ 02 февраля 2010

Допустим, вы хотите распечатать одно из этих великолепных изображений ASCII. Как вы можете сделать это без cout каждой строки в отдельности?

Ответы [ 4 ]

16 голосов
/ 02 февраля 2010

Смежные строковые литералы объединяются, поэтому вы можете сделать это:

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" после каждой строки, потому что вы также очистите выходной поток.

5 голосов
/ 12 января 2016

попробуйте что-то вроде:

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 голосов
/ 02 февраля 2010

Другие уже предложили использовать endl. Хотя это (не обязательно) плохо, использование endl очищает буфер потока вместе с записью новой строки. Вопреки смыслу одного из полученных вами ответов, использование endl делает не помощи (вообще) при переводе новой строки в любую последовательность символов, которую платформа обычно использует для оповещения об окончании линия. Использование newline гарантированно точно соответствует stream << "\n" << flush;". Перевод новых строк в «\ r», или «\ n», или «\ r \ n», или на то, что предпочитает платформа, выполняется на другом уровне, и newline не имеет к этому никакого отношения.

Однако flush может (и часто будет) замедлять ваш ввод / вывод, иногда довольно значительно. Пока вы пишете всего несколько строк (например, пару сотен символов), это, вероятно, совершенно не имеет значения. Однако если вы пишете большой файл, использование endl вместо "\n" может легко привести к замедлению в 10 раз (на самом деле, я бы даже сказал, что большая часть идеи о том, что iostreams являются медленными стеблями) непосредственно от использования endl).

Это не значит, что нет никакой причины использовать endl. flush гарантирует, что все, что было записано в поток, немедленно удаляется из буфера стандартной библиотеки и отправляется в ОС. Если вы хотите обеспечить немедленное отображение, endl может быть полезным. Аналогично, если вы ведете журналирование, и очень важно, чтобы ваш журнал всегда отражал самое последнее известное состояние программы, endl может быть (чрезвычайно) полезным, чтобы гарантировать, что написанное вами действительно регистрируется, а не теряется в буфер, когда / если происходит сбой приложения.

Итак, endl иногда имеет смысл, но, вероятно, в 95% случаев, когда он используется, это действительно неуместно (например, вряд ли удастся достичь чего-либо полезного в любом из ответов на этот вопрос).

0 голосов
/ 02 февраля 2010

К счастью, все довольно просто. Просто используйте endl всякий раз, когда вы хотите начать другую строку.

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

Я хотел бы заявить, что я предпочитаю использовать endl, потому что он должен работать, даже если вы находитесь на платформе, которая требует "\ r \ n" вместо "\ n".

...