比方说,你想打印出那些伟大的ASCII艺术形象之一。你怎么能做到这一点没有“分”每个线路单独?在C++中,如何将几行文本输出到控制台?
回答
相邻字符串文字被连接起来,这样你就可以这样做:
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”有细微的差别,因为您也会刷新输出流。
这是很简单谢天谢地。只要你想开始另一行,就使用endl。
cout << stuff << endl
<< morestuff << endl
<< evenmorestuff << endl;
我想指出,我更喜欢用ENDL,因为它应该工作,即使你是一个需要“\ r \ n”,而不只是“\ n”的平台上。
虽然这是一个明显的答案,但如果频繁执行,则以这种方式打印许多行可能会成为CPU的负担。重载操作符<<的每个用法隐藏了一个函数调用,因此打印多行文本需要MANY函数调用。 – mingos 2010-02-02 01:45:28
是的,它可以成为这样做的负担,但如果他所做的只是印刷一些ascii艺术品,那不应该是一个问题。另一种方法是将所有东西都包装成一大串,然后一下子把它全部甩出去。我偶尔必须这样做,但大多数情况下,这种方法不是问题。 – user250248 2010-02-02 01:48:52
你对'std :: endl'的评论很愚蠢。即使你在一个需要'\ r \ n'而不是'\ n'作为其本地行结束符的平台上,'\ n'仍然是C和C++中的换行符终止符,并且I/O库将它转换为您。 (这是文本模式和二进制模式流之间的区别。)'std :: endl'的效率比原来的'\ n'低一些,因为它不必刷新流。 – jamesdlin 2010-02-02 04:23:12
其他人已经建议使用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%的时间被使用,这是非常不恰当的(例如,它不可能完成任何有用的答案在这个问题的任何答案)。
尝试类似:
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等非常方便。
这很好。谢谢尼尔! – pclrk 2016-11-28 20:04:02
- 1. 如何在C++中输出可擦除文本到控制台?
- 2. 如何在文本文件中保存C++控制台输出?
- 3. 如何将控制台输出重定向到文本文件
- 4. Java:如何将控制台输出保存到文本文件?
- 5. 将整个控制台输出输出到文本文件
- 6. 如何将C#控制台输出流式传输到ASP网页文本框
- 7. 转换c#控制台输出到文本框输出
- 8. 如何将控制台输出附加到maven中的文件?
- 9. 如何将控制台中的输出记录到文件?
- 10. 如何在事件或方法中将文本发送到控制台输出
- 11. 如何在Xcode输出控制台中显示C++输出
- 12. 如何在C#控制台中突出显示并选择控制台文本
- 13. 将Visual C++控制台输出写入或复制到文本文件
- 14. 如何在C++/Windows中输出到控制台
- 15. 如何将执行显示输出到远程C++的Eclipse控制台中?
- 16. 如何在记事本文件中打印控制台输出?
- 17. 如何将vbs脚本的输出返回到R控制台?
- 18. Python:将输出重定向到几个控制台?
- 19. 在RichTextBox中输出控制台c#WindowsForm
- 20. 如何将程序的控制台输出存储在文本文件中?
- 21. 如何使用easy68k缓慢输出文本到控制台
- 22. Jest如何输出富文本到IDE控制台?
- 23. C#UTF8控制台输出
- 24. C#控制台输出
- 25. 类输出到几个ostreams(文件和控制台)
- 26. 如何将控制台文本复制到文本文件?
- 27. Robot Framework:如何将控制台输出重定向到文件
- 28. Groovy如何将控制台输出保存到文件?
- 29. Xcode 5,如何将控制台输出重定向到文件
- 30. Python 3:如何将输出打印到控制台和文件
您想要添加换行符到该字符串或您的代码将取决于显示的宽度。 – 2010-02-02 01:44:46
修正了!谢谢你的收获。 – 2010-02-02 01:45:43
漂亮的ascii图形 - 你使用figlet的?从我+1 ... :) – t0mm13b 2010-02-02 01:57:43