博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言控制台窗口界面编程:printf格式化显示-修改字符字体、颜色和背景
阅读量:2031 次
发布时间:2019-04-28

本文共 4326 字,大约阅读时间需要 14 分钟。

环境:cygwin-Linux+GCC

PS:windows的cmd下不能实现。

在linux终端中一个ls指令得出的显示结果文件夹、文件以及不同操作权限的文件的显示颜色是不同的,那么这个是如何实现的呢?

从上图中看到的,不同的颜色信息有助于判断不同的文件类型。以下面的printf格式化输出为例:

#include
#include
int main(int argc, char **argv){     printf("\033[1m加粗\033[m\n"); printf("\033[1;30m加粗黑色字体\033[m\n"); printf("\033[1;30;41m加粗黑色字体红色背景\033[m\n");     printf("\033[3m斜体\033[m\n"); printf("\033[3;34m斜体深蓝色字体\033[m\n"); printf("\033[3;34;47m斜体深蓝色字体白色背景\033[m\n");     printf("\033[9m删除线\033[m\n"); printf("\033[9;35m删除线紫色字体\033[m\n"); printf("\033[9;35;43m删除线紫色字体黄色背景\033[m\n"); }

得到的输出结果为:

这是一个格式化输出的结果,其格式化为():

/* \033[字符的显示方式;字符的颜色;字符的背景颜色m 需要显示的字符 \033[m */	/* 字符的显示方式:	0(默认值)、1(加粗)、2(灰显)、3(斜体)、4(下划线)、7(反显)、9(删除线)       字符的颜色:	30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(深蓝色)、	35(紫色)、36(浅蓝色)、37(白色)       字符的背景颜色:	40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、	45(紫色)、46(浅蓝色)、47(白色) */

当然也可以这么做:

#include
#include
int main(int argc, char **argv){ int fontShowWay=0, fontColor, backgroundColor, count = 0; for ( fontShowWay = 0; fontShowWay <= 9; fontShowWay ++) for( fontColor = 30; fontColor <= 37; fontColor ++) for ( backgroundColor = 40; backgroundColor <= 47; backgroundColor ++) { count ++; printf("\033[%d;%d;%dm Hello World ! \033[m",fontShowWay, fontColor, backgroundColor); if(count%10 == 0) printf("\n"); } }

此外,这里有一篇文章

在windows系统下进行的字体变换,但是不太好理解。

#include 
#include
#include
#include
/* 基本文本属性 FOREGROUND_BLUE 蓝色 FOREGROUND_GREEN 绿色 FOREGROUND_RED 红色 FOREGROUND_INTENSITY 加强 BACKGROUND_BLUE 蓝色背景 BACKGROUND_GREEN 绿色背景 BACKGROUND_RED 红色背景 BACKGROUND_INTENSITY 背景色加强 COMMON_LVB_REVERSE_VIDEO 反色 */ const WORD FORE_BLUE = FOREGROUND_BLUE; //蓝色文本属性 const WORD FORE_GREEN = FOREGROUND_GREEN; //绿色文本属性 const WORD FORE_RED = FOREGROUND_RED; //红色文本属性 const WORD FORE_PURPLE = FORE_BLUE | FORE_RED; //紫色文本属性 const WORD FORE_CYAN = FORE_BLUE | FORE_GREEN; //青色文本属性 const WORD FORE_YELLOW = FORE_RED | FORE_GREEN; //黄色文本属性 const WORD FORE_GRAY = FOREGROUND_INTENSITY; //灰色文本属性 const WORD BACK_BLUE = BACKGROUND_BLUE; //蓝色背景属性 const WORD BACK_GREEN = BACKGROUND_GREEN; //绿色背景属性 const WORD BACK_RED = BACKGROUND_RED; //绿色背景属性 const WORD BACK_PURPLE = BACK_BLUE | BACK_RED; //紫色背景属性 const WORD BACK_CYAN = BACK_BLUE | BACK_GREEN; //青色背景属性 const WORD BACK_YELLOW = BACK_RED | BACK_GREEN; //黄色背景属性 const WORD BACK_GRAY = BACKGROUND_INTENSITY; //灰色背景属性 int main() { HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄 CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体 GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息 SetConsoleTextAttribute(handle_out, FORE_BLUE); printf("蓝色\n"); SetConsoleTextAttribute(handle_out, FORE_RED); printf("红色字符\n"); SetConsoleTextAttribute(handle_out, FORE_GREEN); printf("绿色字符\n"); SetConsoleTextAttribute(handle_out, FORE_PURPLE); printf("紫色字符\n"); SetConsoleTextAttribute(handle_out, FORE_CYAN); printf("青色字符\n"); SetConsoleTextAttribute(handle_out, FORE_YELLOW); printf("黄色字符\n"); SetConsoleTextAttribute(handle_out, FORE_GRAY); printf("灰色字符\n"); SetConsoleTextAttribute(handle_out, FORE_GREEN | FORE_BLUE | FORE_RED); printf("白色字符\n"); SetConsoleTextAttribute(handle_out, BACK_BLUE); printf("蓝色背景\n"); SetConsoleTextAttribute(handle_out, BACK_RED); printf("红色背景\n"); SetConsoleTextAttribute(handle_out, BACK_GREEN); printf("绿色背景\n"); SetConsoleTextAttribute(handle_out, BACK_PURPLE); printf("紫色背景\n"); SetConsoleTextAttribute(handle_out, BACK_CYAN); printf("青色背景\n"); SetConsoleTextAttribute(handle_out, BACK_YELLOW); printf("黄色背景\n"); SetConsoleTextAttribute(handle_out, BACK_GRAY); printf("灰色背景\n"); SetConsoleTextAttribute(handle_out, BACK_BLUE | BACK_RED | BACK_GREEN); printf("白色背景\n"); SetConsoleTextAttribute(handle_out, BACK_GREEN | FORE_RED); //示例:绿色背景红色字符 printf("绿色背景与红色字符的混合\n"); SetConsoleTextAttribute(handle_out, FOREGROUND_INTENSITY | FORE_RED); //示例:亮红色字符 printf("亮色的生成,与加强色融合\n"); return 0; }

编译与运行:

你可能感兴趣的文章
Individual Homework -----questions about the text book by 张静
查看>>
[初心者适用]如何为代码编写基本的文档
查看>>
DailyScrum beta 第三天!
查看>>
骚博记, 又名: building another twitter
查看>>
Daily scrum beta 第五天!
查看>>
为什么牛逼?——"Stonie is a KungFu monk"游戏精品功能介绍与详细规范,以及其中的挑战...
查看>>
影响未来的应用ifttt,互联网自主神经系统的又一个有力证据
查看>>
IT管理人才必备的十大能力
查看>>
迎接五大趋势 拥抱两个世界
查看>>
[置顶] 电信系统方案 >> 电信Boss系统
查看>>
英特尔诺基亚联手研发Symbian系统的智能手机
查看>>
怎样成为优秀的软件模型设计者?
查看>>
解决spring和struts配合问题
查看>>
嵌入式系统Linux内核开发工程师必须掌握的三十道题
查看>>
产品管理系列(一)---优秀的产品经理所具有的素质
查看>>
架构师之路(5)---IoC框架
查看>>
ExtJS 实现的Web文件管理系统
查看>>
SOA架构师注意的问题
查看>>
最佳拍档:首席市场官与首席技术官
查看>>
CIO领导力必会的八大诀窍
查看>>