Skip to content

改变输出文字的颜色

在C语言中,可以使用转义序列来打印带有颜色的文本。以下是一些常见的转义序列:

  • \033[0m:重置所有属性(包括颜色)
  • \033[1m:粗体
  • \033[2m:暗色
  • \033[3m:斜体
  • \033[4m:下划线
  • \033[30m - \033[37m:设置前景色(30-37对应不同的颜色)
  • \033[40m - \033[47m:设置背景色(40-47对应不同的颜色)

以下是一个示例,演示如何在C语言中使用printf函数打印带有颜色的文本:

c
#include <stdio.h>

int main() {
    printf("\033[31mThis is red text\033[0m\n");
    printf("\033[32mThis is green text\033[0m\n");
    printf("\033[33mThis is yellow text\033[0m\n");
    printf("\033[34mThis is blue text\033[0m\n");
    printf("\033[35mThis is magenta text\033[0m\n");
    printf("\033[36mThis is cyan text\033[0m\n");
    printf("\033[37mThis is white text\033[0m\n");
    
    return 0;
}

在上述示例中,使用\033来表示转义序列,然后使用相应的颜色代码来设置文本颜色。在每个颜色代码之后,使用\033[0m来重置颜色,以确保后续文本不受影响。

请注意,这种方法在不同的终端和操作系统上的效果可能有所不同。有些终端可能不支持或部分支持颜色转义序列。

\033的说明

关于ASCII字符的那些事儿中提到,ASCII字符可以使用前面带反斜杠的八进制或者十六进制数字来表示单个字符。

这里的\033就是这个意思,反斜杠后面的033是八进制,化为十进制是27,对应着ASCII字符集表格上十进制编号为27的字符,即ESC。这个字符用来控制打印机的输出格式。

格式说明

在linux中,我们可以利用这个字符来设置终端上的字体显示效果。

比如使用echo命令并利用\033控制字体显示效果的格式如下:

shell
echo -e "\033[参数1;参数2;参数3m要显示的内容\033[0m"

(1)\033[参数1;参数2;参数3m,是控制码的写法,表明后面待显示内容的格式。

(2)参数1表示字体背景颜色,可选值为40~49、100~107;参数2表示字体颜色,可选值为30~39、90~97;参数3表示显示效果,可选值为0~8。这些数字的含义见附录。

(3)要显示的内容中可以有变量的引用,显示的时候会展开变量的内容。

(4)\033[0m是具体的控制码,表明关闭所有属性。如果在格式最后没有添加这个控制码来关闭所有属性,那么“\033[字体背景颜色;字体颜色m”所设置的格式将应用于接下来的所有显示。当然也可以根据需要修改这个具体的控制码,但一般不这么做。

注意事项

(1)如果没有设置字体背景颜色这个内容,则不需要添加字体颜色之前的分号。可以自动根据这个数字所处的范围,推出这个数字是用来表示字体背景颜色,还是用来表示字体颜色,或者其他设置,因为不同项目的设置所用的数字范围不同。

比如echo -e "\033[36mwhat's your name:\033[0m"的显示效果如下:

(2)字母m和结尾\033[0m之间的内容,就是要显示在终端的内容。字母m后面如果紧跟着空格,那么也会被当做字符输出。

(3)如果要显示的内容结尾是某个特殊符号(比如)则可能会报错,需要在这个特殊符号与\033[0m之间输入一个空格。

附录

(1)字体颜色设置说明(斜杆前后的数字表示同一种颜色,但斜杆后面的数字让颜色更亮)。

数字描述
30\90黑色
31\91红色
32\92绿色
33\93黄色
34\94蓝色
35\95紫色
36\96深绿
37\97白色

img

img

(2)字体背景颜色设置说明(斜杆前后的数字表示同一种颜色,但斜杆后面的数字让颜色更亮)

数字描述
40\100黑色
41\101红色
42\102绿色
43\103黄色
44\104蓝色
45\105紫色
46\106深绿
47\107白色

img

img

(3) 控制码说明

控制码含义
\033[0m关闭所有属性
\033[1m设置高宽度
\033[4m下划线
\033[5m闪烁
\033[7m反显
\033[8m消隐
\033[30m ~ \033[37m 设置前景色
\033[40m ~ \033[47m设置背景色
\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显示光标