You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:03:59