vault backup: 2026-01-22 20:19:30
This commit is contained in:
208
Collection/YoudaoyunNotes/02C语言/[01-拓展]printf输出颜色与字体控制.md
Normal file
208
Collection/YoudaoyunNotes/02C语言/[01-拓展]printf输出颜色与字体控制.md
Normal file
@@ -0,0 +1,208 @@
|
||||
作者:粤嵌-李林峰
|
||||
|
||||
# 终端显示字体和颜色的方法
|
||||
|
||||
在终端中使用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)
|
||||
Reference in New Issue
Block a user