C/C++改变终端输出字体的颜色(Linux)

例子:

1
2
3
4
5
6
//输出红色的hello world!
#include <stdio.h>
int main() {
printf("\033[31mhello world!\033[0m");
return 0
}

ASCII编码中的八进制数字033代表ESC,这是非打印字符,属于控制字符。ASCII码表对他的解释是——换码(溢出),其实这是一个屏幕控制码,是由ASCII码驱动支持的一系列用来控制终端的控制码,如:控制显示颜色、闪烁、发出声音等。(Linux下的GNU和Bash支持用\e代替\033)

格式:

1
printf("\033[属性1;属性2;属性3m;有颜色的输出");

控制码如下:

\033[0m 清除所有格式(结束格式,如果格式范围结束,需要在结束为止添加此控制码来结束上一个格式,否则后续终端输入或输出都会沿用此格式)

\033[1m 设置文字颜色亮度,变亮

\033[2m 设置文字颜色亮度,变暗

\033[3m 斜体

\033[4m 下划线

\033[5m 闪烁(有些系统并不支持)

\033[7m 反显

\033[8m 隐藏字符

\033[9m 删除线

\033[nA 光标上移n行

\033[nB 光标下移n行

\033[nC 光标右移n行

\033[nD 光标左移n行

\033[y;xH 设置光标位置

\033[2J 清屏

\033[K 清除从光标到行尾的内容

\033[s 保存光标位置

\033[u 恢复光标位置

\033[?25l 隐藏光标

\033[?25h 显示光标

\033[2J\033[0;0H 清屏且将光标置顶(相当于shell的clear操作)

其中颜色格式是由两个数字表示

\033[30m ~ \033[37m 设置前景色

\033[40m ~ \033[47m 设置背景色

颜色代码:

30 黑色字体 40 黑色背景

31 红色字体 41 红色背景

32 绿色字体 42 绿色背景

33 黄色字体 43 黄色背景

34 蓝色字体 44 蓝色背景

35 紫色字体 45 紫色背景

36 青色字体 46 青色背景

37 白色字体 47 白色背景

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
int main(){
printf("原色\n");
printf("\033[31m红色\033[0m\t");
printf("\033[41m红底\033[0m\n");
printf("\033[32m绿色\033[0m\t");
printf("\033[42m绿底\033[0m\n");
printf("\033[33m黄色\033[0m\t");
printf("\033[43m黄底\033[0m\n");
printf("\033[34m蓝色\033[0m\t");
printf("\033[44m蓝底\033[0m\n");
printf("\033[35m紫色\033[0m\t");
printf("\033[45m紫底\033[0m\n");
printf("\033[36m青色\033[0m\t");
printf("\033[46m青底\033[0m\n");
printf("\033[37m白色\033[0m\t");
printf("\033[47m白色\033[0m\n");
return 0;
}