一、Linux下控制台文字上色的方法
Linux下控制台颜色是通过添加专用数字来选择的。这些数字夹在 "\e["和 "m"之间。如果指定一个以上的数字,则用分号将它们分开。
举几个例子:
(1)第一个数字(31)为前景颜色(红色);第二个数字为(42)背景颜色(绿色)
echo -e "\e[31;42m"
(2)使用"\e[0m"序列将颜色重新设置为正常值 每条打印之后都需要及时取消,否则后面的所有打印都会设置为这个属性
echo -e "\e[0m" 或 echo -e "\033[0m"
(3)颜色对应关系如下所示: \e[30m – \e[37m 设置前景色(字体颜色)
字符 | 颜色 |
---|
30 | 黑色 | 31 | 红色 | 32 | 绿色 | 33 | 黄色 | 34 | 蓝色 | 35 | 紫色 | 36 | 深绿 | 37 | 白色 |
\e[40m – \e[47m 设置背景色
字符 | 颜色 |
---|
40 | 黑色 | 41 | 红色 | 42 | 绿色 | 43 | 黄色 | 44 | 蓝色 | 45 | 紫色 | 46 | 深绿 | 47 | 白色 |
一些屏幕控制ASCII字符:
字符 | 动作 |
---|
0 | 关闭所有属性 | 1 | 设置高亮度 | 4 | 下划线 | 5 | 闪烁 | 7 | 反显 | 8 | 消隐 |
还有一些控制终端光标的字符:
字符 | 动作 |
---|
nA | 光标上移n行 | nB | 光标下移n行 | nC | 光标右移n行 | nD | 光标左移n行 | y; xH | 设置光标位置 | 2J | 清屏 | K | 清除从光标到行尾的内容 | s | 保存光标位置 | u | 恢复光标位置 | ?25l | 隐藏光标 | ?25h | 显示光标 |
具体到编程中,printf() 颜色设置示例代码如下所示。
demo1:
printf("\e[31m\e[42m Hello World. \e[0m \n");
demo2:
打印颜色为绿色并且闪烁:
printf("\033[32;5mHelloWorld\033[0m\r\n");
实际效果: 
参考:好玩!C语言打印彩色字符,还能闪烁!
二、Windows下控制台文字上色的方法
Windows下控制台颜色是通过SetConsoleTextAttribute()函数完成的。SetConsoleTextAttribute()函数的原型如下所示。 BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes); 其中2个参数的含义如下所示:
- hConsoleOutput:指向控制台的句柄。
- wAttributes:文本属性。
hConsoleOutput可以选择以下3种句柄: - STD_INPUT_HANDLE: 标准输入的句柄
- STD_OUTPUT_HANDLE: 标准输出的句柄
- STD_ERROR_HANDLE: 标准错误的句柄
wAttributes可以控制前景色和背景色:
- FOREGROUND_BLUE: 字体颜色:蓝
- FOREGROUND_GREEN: 字体颜色:绿
- FOREGROUND_RED: 字体颜色:红
- FOREGROUND_INTENSITY: 前景色高亮显示
- BACKGROUND_BLUE: 背景颜色:蓝
- BACKGROUND_GREEN: 背景颜色:绿
- BACKGROUND_RED: 背景颜色:红
- BACKGROUND_INTENSITY 背景色高亮显示
demo如下:
#include <stdio.h>
#include <windows.h>
int main()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
printf("red\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
printf("green\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);
printf("blue\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED|FOREGROUND_GREEN);
printf("red+green=yellow\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED|FOREGROUND_BLUE);
printf("red+blue=purple\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN|FOREGROUND_BLUE);
printf("green+blue=cyan\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED|BACKGROUND_GREEN);
printf("Add background\n");
return 0;
}
运行结果如下: 
|