C语言输出带颜色的打印
Posted 叮咚咕噜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言输出带颜色的打印相关的知识,希望对你有一定的参考价值。
一、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");
实际效果:
二、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;
}
运行结果如下:
以上是关于C语言输出带颜色的打印的主要内容,如果未能解决你的问题,请参考以下文章