除了Linux环境,这项技巧在Windows的Visual Studio下也同样适用。先看下面这段示例代码:
#include <stdio.h>
int main(int argc, char **argv)
{
printf("\033[44;37;5m hello world\033[0m\n");
return 0;
}
编译并运行这段代码后,你将在终端中看到彩色输出,结果如下:

可见,此时输出的文字不仅有了颜色(白色前景),还拥有了蓝色背景和闪烁效果。
其核心原理在于,在输出字符串时嵌入特定的控制序列。格式为 “\033[ ; m …… \033[0m ”。其中 \033[ 是转义序列的开始,中间的数字代码用于定义颜色和样式,m 表示设置图形模式,最后的 \033[0m 则用于重置所有属性,避免后续输出也被染色。
颜色通过数字代码来定义,具体范围如下:
字背景颜色范围:40 - 49
- 40:黑
- 41:深红
- 42:绿
- 43:黄色
- 44:蓝色
- 45:紫色
- 46:深绿
- 47:白色
字颜色(前景色)范围:30 - 39
- 30:黑
- 31:红
- 32:绿
- 33:黄
- 34:蓝色
- 35:紫色
- 36:深绿
- 37:白色
这其实是 ANSI转义序列 的一部分。除了颜色,它还能控制许多终端显示属性,下面是一些常用的ANSI控制码说明:
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m -- \33[37m 设置前景色
\33[40m -- \33[47m 设置背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH 设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标
最后,让我们通过一个综合实例来巩固理解,看看如何组合使用这些代码:
#include <stdio.h>
int main(int argc, char **argv)
{
// 输出红色文字
printf("\033[31m The ......\n\033[0m");
// 尝试设置高亮、反显等属性(注意:部分属性组合可能因终端而异)
printf("\033[2;7;1mHEOO.\n\033[2;7;0m");
// 设置背景为深红(41),前景为深绿(36)
printf("\033[41;36msomthe here\n\033[0m");
return 0;
}
运行上面的程序,你会在终端中看到类似下图的输出效果,直观地展示了不同颜色和属性的组合:

掌握ANSI转义序列能让你的命令行程序输出更具可读性和表现力。如果你想深入探讨更多C语言编程技巧,欢迎来 云栈社区 交流分享。
|