在Linux终端下调试程序时,有时需要输出大量信息。若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据。
例如下图就可以增加界面的美观性。
printf(YELLOW"*********************************\n"NONE); printf(GREEN"****------------*------------****\n"NONE); printf(BLUE"* 1、添加信息 2、查看信息 *\n"NONE); printf(PURPLE"* 3、查找信息 4、删除信息 *\n"NONE); printf(LIGHT_BLUE"* 5、修改信息 6、退出菜单 *\n"NONE); printf(LIGHT_GREEN"****------------*------------****\n"NONE); printf(YELLOW"*********************************\n"NONE);
颜色表
颜色代码:
字背景颜色范围: 40--49 字颜色: 30--39
40: 黑 30: 黑
41: 红 31: 红
42: 绿 32: 绿
43: 黄 33: 黄
44: 蓝 34: 蓝
45: 紫 35: 紫
46: 深绿 36: 深绿
47: 白色 37: 白色
printf("\033[41;32m字背景颜色红色;字体颜色绿色\033[0m\n");
结果:
终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式下的系统显示功能,与具体语言无关。转义序列以控制字符'ESC'开头。该字符的ASCII码十进制表示为27,十六进制表示为0x1B,八进制表示为033。多数转义序列超过两个字符,故通常以'ESC'和左括号'['开头。该起始序列称为控制序列引导符(CSI,Control Sequence Intro),通常由'\033['或'\e['代替。
通过转义序列设置终端显示属性时,可采用以下格式:
\033[ Param {;Param;...}m
或
\e[ Param {;Param;...}m
其中,'\033['或'\e['引导转义序列,'m'表示设置属性并结束转义序列。Param为属性值,{...}表示可选(多个参数之间用分号隔
开,与顺序无关)。
源代码
#define NONE "\e[0m" #define BLACK "\e[0;30m" #define L_BLACK "\e[1;30m" #define RED "\e[0;31m" #define L_RED "\e[1;31m" #define GREEN "\e[0;32m" #define L_GREEN "\e[1;32m" #define BROWN "\e[0;33m" #define YELLOW "\e[1;33m" #define BLUE "\e[0;34m" #define L_BLUE "\e[1;34m" #define PURPLE "\e[0;35m" #define L_PURPLE "\e[1;35m" #define CYAN "\e[0;36m" #define L_CYAN "\e[1;36m" #define GRAY "\e[0;37m" #define WHITE "\e[1;37m"
实例(动手体验下用法)
printf("[%2u]" BLACK "BLACK " L_BLACK "L_BLACK\n" NONE, __LINE__); printf("[%2u]" RED "RED " L_RED "L_RED\n" NONE, __LINE__); printf("[%2u]" GREEN "GREEN " L_GREEN "L_GREEN\n" NONE, __LINE__); printf("[%2u]" BROWN "BROWN " YELLOW "YELLOW\n" NONE, __LINE__); printf("[%2u]" BLUE "BLUE " L_BLUE "L_BLUE\n" NONE, __LINE__); printf("[%2u]" PURPLE "PURPLE " L_PURPLE "L_PURPLE\n" NONE, __LINE__); printf("[%2u]" CYAN "CYAN " L_CYAN "L_CYAN\n" NONE, __LINE__); printf("[%2u]" GRAY "GRAY " WHITE "WHITE\n" NONE, __LINE__);
!!!注意点!!!
在你为一行printf输出赋予颜色后,在输出结束后一定要加上NONE即“\e[0m”来清除你为改行赋予的颜色,否则该颜色会一直存在并为后面的行染色。
printf(YELLOW"*********************************\n"); //此处结尾未加上NONE! printf("****------------*------------****\n"); printf("* 1、添加信息 2、查看信息 *\n"); printf("* 3、查找信息 4、删除信息 *\n"); printf("* 5、修改信息 6、退出菜单 *\n"); printf("****------------*------------****\n"); printf("*********************************\n");