作者:粤嵌-李林峰 # 终端显示字体和颜色的方法 在终端中使用printf输出时,可以通过ANSI转义码来控制文本的颜色、背景色和字体样式。下面详细介绍各种控制方法。 ## 基本格式 ANSI转义码的基本格式为: ```c printf("\033[属性值;...;属性值 m 文本内容 \033[0m"); ``` 其中: - \033 是ESC字符的八进制表示(也可以用\x1b十六进制表示) - [ 开始控制序列 - 属性值 是控制代码,多个属性用分号分隔 - m 结束控制序列 - \033[0m 重置所有属性 ## 字体样式控制 | 代码 | 效果 | | -- | -- | | 0 | 重置所有属性 | | 1 | 加粗/高亮 | | 2 | 暗淡/弱化 | | 3 | 斜体 | | 4 | 下划线 | | 5 | 闪烁 | | 7 | 反显(反色) | | 8 | 隐藏 | | 9 | 删除线 | 示例: ```c printf("\033[1m加粗文本\033[0m\n"); printf("\033[3m斜体文本\033[0m\n"); printf("\033[4m下划线文本\033[0m\n"); ``` ## 前景色(文字颜色) | 代码 | 颜色 | | -- | -- | | 30 | 黑色 | | 31 | 红色 | | 32 | 绿色 | | 33 | 黄色 | | 34 | 蓝色 | | 35 | 洋红 | | 36 | 青色 | | 37 | 白色 | | 90 | 亮黑 | | 91 | 亮红 | | 92 | 亮绿 | | 93 | 亮黄 | | 94 | 亮蓝 | | 95 | 亮洋红 | | 96 | 亮青 | | 97 | 亮白 | 示例: ```c printf("\033[31m红色文字\033[0m\n"); printf("\033[92m亮绿色文字\033[0m\n"); ``` ## 背景色 | 代码 | 颜色 | | -- | -- | | 40 | 黑色 | | 41 | 红色 | | 42 | 绿色 | | 43 | 黄色 | | 44 | 蓝色 | | 45 | 洋红 | | 46 | 青色 | | 47 | 白色 | | 100 | 亮黑 | | 101 | 亮红 | | 102 | 亮绿 | | 103 | 亮黄 | | 104 | 亮蓝 | | 105 | 亮洋红 | | 106 | 亮青 | | 107 | 亮白 | 示例: ```c printf("\033[41m红色背景\033[0m\n"); printf("\033[104m亮蓝色背景\033[0m\n"); ``` ## 组合使用 可以同时设置多个属性,用分号分隔: ```c printf("\033[1;31;42m加粗红色文字绿色背景\033[0m\n"); printf("\033[4;93;44m下划线亮黄色文字蓝色背景\033[0m\n"); ``` ## 256色模式 对于支持256色的终端,可以使用更丰富的颜色: 前景色: ```c printf("\033[38;5;颜色编号m文本\033[0m"); ``` 背景色: ```c printf("\033[48;5;颜色编号m文本\033[0m"); ``` 颜色编号范围0-255,其中: - 0-15:标准16色 - 16-231:6×6×6 RGB立方 - 232-255:灰度 示例: ```c printf("\033[38;5;196m红色文字\033[0m\n"); printf("\033[48;5;226m黄色背景\033[0m\n"); ``` ## RGB真彩色模式 最新终端支持RGB真彩色: 前景色: ```c printf("\033[38;2;R;G;Bm文本\033[0m"); ``` 背景色: ```c printf("\033[48;2;R;G;Bm文本\033[0m"); ``` 其中R,G,B为0-255的数值。 示例: ```c printf("\033[38;2;255;100;100m自定义颜色文字\033[0m\n"); printf("\033[48;2;100;200;255m自定义背景色\033[0m\n"); ``` ## 注意事项 1. 不是所有终端都支持所有颜色和效果 1. 使用后记得用\033[0m重置属性 1. 某些效果(如闪烁)可能被终端禁用 1. Windows CMD默认不支持,需要启用ANSI支持或使用其他终端 ## 实用技巧 可以定义宏简化使用: ```c #define RED "\033[31m" #define GREEN "\033[32m" #define RESET "\033[0m" printf(RED "错误: " RESET "发生错误\n"); ``` 或者定义函数: ```c void print_color(const char* color, const char* text) { printf("%s%s" RESET, color, text); } print_color("\033[1;34m", "重要信息"); ``` 参考文件: [terminal_colors.h](attachments/WEBRESOURCEf8f411dd54c53da227a89fc7031bb0c7terminal_colors.h)