2010-02-02 107 views

回答

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”有细微的差别,因为您也会刷新输出流。

+0

您想要添加换行符到该字符串或您的代码将取决于显示的宽度。 – 2010-02-02 01:44:46

+0

修正了!谢谢你的收获。 – 2010-02-02 01:45:43

+0

漂亮的ascii图形 - 你使用figlet的?从我+1 ... :) – t0mm13b 2010-02-02 01:57:43

2

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

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

我想指出,我更喜欢用ENDL,因为它应该工作,即使你是一个需要“\ r \ n”,而不只是“\ n”的平台上。

+1

虽然这是一个明显的答案,但如果频繁执行,则以这种方式打印许多行可能会成为CPU的负担。重载操作符<<的每个用法隐藏了一个函数调用,因此打印多行文本需要MANY函数调用。 – mingos 2010-02-02 01:45:28

+0

是的,它可以成为这样做的负担,但如果他所做的只是印刷一些ascii艺术品,那不应该是一个问题。另一种方法是将所有东西都包装成一大串,然后一下子把它全部甩出去。我偶尔必须这样做,但大多数情况下,这种方法不是问题。 – user250248 2010-02-02 01:48:52

+0

你对'std :: endl'的评论很愚蠢。即使你在一个需要'\ r \ n'而不是'\ n'作为其本地行结束符的平台上,'\ n'仍然是C和C++中的换行符终止符,并且I/O库将它转换为您。 (这是文本模式和二进制模式流之间的区别。)'std :: endl'的效率比原来的'\ n'低一些,因为它不必刷新流。 – jamesdlin 2010-02-02 04:23:12

1

其他人已经建议使用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%的时间被使用,这是非常不恰当的(例如,它不可能完成任何有用的答案在这个问题的任何答案)。

2

尝试类似:

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等非常方便。

+1

这很好。谢谢尼尔! – pclrk 2016-11-28 20:04:02

相关问题