如何在C语言中便捷打印ASCII艺术图?求替代R"EOF()EOF"的方案
C语言里打印ASCII艺术图的便捷方案
嘿,这个需求太接地气了!我自己做项目的时候也总喜欢加些ASCII艺术图当启动标识,刚好对C语言里的替代方案门儿清~
首先说最接近你习惯的方案:从C11标准开始,C语言正式支持了原始字符串字面量,语法和你用的C++写法非常像,甚至更简洁。
基础用法
直接用R"(...)"包裹你的ASCII艺术图就行,里面的换行、空格、特殊字符都不需要转义,完全原样保留:
#include <stdio.h> int main() { // 直接把ASCII图塞进去就行,不用转义任何字符 const char* ascii_art = R"( _______ / \ | Hello | \_______/ | | | | ^ ^ )"; puts(ascii_art); return 0; }
处理包含)的ASCII图
如果你的艺术图里刚好有)这个字符(比如画个带括号的表情),直接用R"(...)"会导致编译器识别错误,这时候可以自定义分隔符,写法是R"自定义分隔符(...)自定义分隔符",比如:
const char* tricky_art = R"my_sep( ____ / \ | (o.o) | \____/ )my_sep";
只要自定义的分隔符不在你的艺术图里出现就行,随便取什么名字都可以。
旧标准兼容方案(C99及更早)
如果你的项目必须兼容C99或更老的标准,那没办法用原始字符串,只能老老实实用转义字符:换行用\n,双引号用\",比如:
const char* old_style_art = " _______\n" " / \\\n" " | Hello |\n" " \\_______/\n" " | |\n" " | |\n" " ^ ^\n";
这种写法就很繁琐,容易出错,所以还是推荐尽量升级编译器到支持C11的版本——现在主流的GCC、Clang、MSVC早就支持C11了,完全不用担心兼容性问题。
总的来说,C11的原始字符串字面量就是你要找的“同样易用”的替代方案,用法和你熟悉的C++写法几乎一致,甚至更灵活~
内容的提问来源于stack exchange,提问作者Micle Sergiu
相关产品推荐
相关产品推荐

