假设你想要打印出那些伟大的ASCII艺术图像之一。如果不单独使用cout
每行,怎么办呢?
答案 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”的平台上它也应该工作。