C语言中printf如何输出彩色文字?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 C语言 正文

下面我将详细解释如何使用它,并提供代码示例。

c语言 printf 颜色
(图片来源网络,侵删)

核心原理:ANSI 转义码

终端通过识别特殊的字符串序列来改变后续文本的样式,比如颜色、背景色、加粗等,这些序列以 \033[ 开头(也可以写作 \e[\x1b[),以 m

  • 格式: \033[<code>m
  • 作用: 这个序列会改变终端的显示状态,直到遇到下一个 \033[0m(重置所有样式)为止。

基本使用方法

要在 printf 中使用颜色,你只需要将对应的 ANSI 转义码字符串嵌入到你的格式字符串中即可。

重置码 (非常重要!)

在改变颜色后,最好在输出结束时使用 重置码 \033[0m,将终端的样式恢复到默认状态,否则后续的所有文本都会带有你设置的样式。

\033[0m 是重置所有样式的通用代码。

c语言 printf 颜色
(图片来源网络,侵删)

常用颜色代码

前景色(文本颜色)

代码 颜色 英文名
\033[30m 黑色 Black
\033[31m 红色 Red
\033[32m 绿色 Green
\033[33m 黄色 Yellow
\033[34m 蓝色 Blue
\033[35m 洋红 Magenta
\033[36m 青色 Cyan
\033[37m 白色 White

背景色

代码 颜色 英文名
\033[40m 黑色 Black
\033[41m 红色 Red
\033[42m 绿色 Green
\033[43m 黄色 Yellow
\033[44m 蓝色 Blue
\033[45m 洋红 Magenta
\033[46m 青色 Cyan
\033[47m 白色 White

其他样式

代码 样式 英文名
\033[1m 加粗 Bold
\033[4m 下划线 Underline
\033[0m 重置 Reset

C 语言代码示例

下面是一个完整的 C 语言示例,展示了如何打印不同颜色和样式的文本。

#include <stdio.h>
int main() {
    // 打印红色文本
    printf("\033[31mThis is red text.\033[0m\n");
    // 打印绿色背景的白色文本
    printf("\033[47m\033[32mThis is green text on a white background.\033[0m\n");
    // 打印加粗的黄色文本
    printf("\033[1m\033[33mThis is bold yellow text.\033[0m\n");
    // 打印带下划线的蓝色文本
    printf("\033[4m\033[34mThis is underlined blue text.\033[0m\n");
    // 组合使用:红色加粗文本
    printf("\033[31m\033[1mThis is bold red text.\033[0m\n");
    // 一个更清晰的例子:打印彩色标题
    printf("\033[1;32m"); // 设置为加粗和绿色
    printf("--- My Program Output ---\n");
    printf("\033[0m"); // 重置
    printf("This is a normal line.\n");
    printf("\033[31m[ERROR] This is an error message.\033[0m\n");
    printf("\033[32m[SUCCESS] This is a success message.\033[0m\n");
    return 0;
}

如何编译和运行?

  1. 将上述代码保存为 color.c
  2. 使用 GCC 编译:gcc color.c -o color
  3. 运行程序:./color

预期输出效果:

你的终端会显示如下内容(不同终端的颜色可能略有差异):

c语言 printf 颜色
(图片来源网络,侵删)

重要注意事项和跨平台问题

  1. 不是所有终端都支持 这种方法在绝大多数现代终端中都是有效的,

    • Linux 终端 (GNOME Terminal, Konsole, XFCE Terminal 等)
    • macOS 的 Terminal.app 和 iTerm2
    • Windows 10/11 的 Windows Terminal 和新版命令提示符

    旧版的 Windows 命令提示符 中,ANSI 转义码默认是不被支持的,如果你在这些环境中运行,会看到一堆奇怪的字符 \033[31m

  2. Windows 10/11 的解决方案 对于 Windows 10/11,你可以通过一个简单的 API 调用来启用 ANSI 支持,在你的 C 程序开头加上以下代码即可:

    #include <windows.h>
    // 在 main 函数的最开始调用
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD mode = 0;
    GetConsoleMode(hStdOut, &mode);
    SetConsoleMode(hStdOut, mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING);

    加上这段代码后,你的 ANSI 颜色代码就能在 Windows Terminal 和新版 CMD 中正常工作了。

  3. 可读性差 直接在 printf 字符串中写 \033[31m 会降低代码的可读性,一个更好的做法是使用宏定义:

    #include <stdio.h>
    // 定义颜色宏
    #define RED     "\033[31m"
    #define GREEN   "\033[32m"
    #define YELLOW  "\033[33m"
    #define BLUE    "\033[34m"
    #define MAGENTA "\033[35m"
    #define CYAN    "\033[36m"
    #define WHITE   "\033[37m"
    #define RESET   "\033[0m"
    int main() {
        printf(RED "This is red text.\n" RESET);
        printf(GREEN "This is green text.\n" RESET);
        printf(YELLOW "This is yellow text.\n" RESET);
        printf(BLUE "This is blue text.\n" RESET);
        printf(MAGENTA "This is magenta text.\n" RESET);
        printf(CYAN "This is cyan text.\n" RESET);
        printf(WHITE "This is white text.\n" RESET);
        return 0;
    }

    使用宏定义后,代码清晰明了,易于维护和扩展。

  • 原理: 使用 ANSI 转义码 \033[<code>m 来控制终端样式。
  • 关键: 记得使用 \033[0m重置样式。
  • 优点: 简单、通用,适用于绝大多数现代终端。
  • 缺点: 在旧版 Windows CMD 中不工作(可通过 API 解决)。
  • 最佳实践: 使用宏定义来提高代码可读性。

对于更复杂的跨平台终端控制,可以考虑使用专门的库,如 ncurses,但就简单的颜色输出而言,ANSI 转义码已经足够强大和方便。

-- 展开阅读全文 --
头像
C语言中sizeof数组结果何时会失真?
« 上一篇 今天
织梦模板默认是什么?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码