文章目录

  • C语言颜色头文件——自制非常简单的调用函数
  • 实战演练——一个基础的枚举变量小程序
  • 牛刀小试——查找字符小程序

C语言颜色头文件——自制非常简单的调用函数

显然,C语言是不会提供打印彩色字符的标准函数,而我们有时候为了强调C语言打印的部分字符,或者仅仅是为了做一个明显而好看的标记而需要改变打印的颜色,幸运的是,C语言还是可以实现的。之前在CSDN上搜索的很多方法都在VC6以及DEVC++用不了,很多使用者可能为之头疼,在此介绍一种在VC6和DEVC++里面都可以用的方法。
一般的C编译器都有这个<windows.h>,<winnt.h>头文件,我们如果要方便地使用调整打印颜色的指令的话,不妨事先写好一个color.h的用户头文件,每次需要用到时就放在我们的C程序的同目录下,需要的时候直接#include "color.h"即可。下面就是我写的一个color.h的头文件,仅供大家参考。
color.h头文件如下:

#include <windows.h>
#include <winnt.h>
#include <stdio.h>
//定义颜色
#define BLACK 0 //黑色
#define BLUE 1  //蓝色
#define GREEN 2 //绿色
#define LAKEBLUE 3  //湖蓝色
#define RED 4   //红色
#define PURPLE 5    //紫色
#define YELLOW 6    //黄色
#define WHITE 7     //白色
#define GREY 8  //灰色
#define LIGHTBLUE 9 //淡蓝色
#define LIGHTGREEN 10   //淡绿色
#define LIGHTRED 11 //淡红色
#define LIGHTPURPLE 12  //淡紫色
#define LIGHTYELLOW 13  //淡黄色
#define BRIGHTWHITE 14  //亮白色
void setcolor(int color)
{HANDLE hConsoleWnd;hConsoleWnd = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hConsoleWnd,color);
}

这里需要说明的是,系统里面自带的颜色只有15种,但对于我们日常使用已经足够了,如果需要更深入地在颜色上下功夫,可以取Easyx的官网上下载easyx的头文件和lib文件,会获得更佳的视觉效果。
HANDLE是一个句柄操作,这里我们不需要对系统自带的头文件有过多的了解,毕竟我们做的是应用软件不是系统软件,几行代码就涵盖了我们需要修改的颜色,这里把int型color变量作为传递的参数,然后把15中系统自带的颜色定义为符号常量就ok(当然你也可以定义你想要的符号,只要你知道它是什么颜色)。

实战演练——一个基础的枚举变量小程序

现在用一个简单有趣的问题来做打印颜色字符的演示——枚举变量的使用。众所周知,C语言有枚举变量类型enum,我们不妨定义一个袋子里面装了5中颜色的球,一次取一个球,总共取三次,问可能的取法有哪些?这是一个很简单的枚举变量的题目,打印也非常简单,但如果我们将取出的球对应颜色呢?是不是就非常有趣,请看以下代码:
template.c头文件如下:

#include "color.h"//包含了stdio的头文件
enum Color {red,blue,green,yellow,white};
void colorprintf(enum Color color);
int main()
{int i,count=0;enum Color {red,blue,green,yellow,white};enum Color color[3];printf("*****************枚举类型变量实验(穷举法算法)*********************\n");printf("从红球、蓝球、绿球、黄球和白球中依次取出3个球,求可能的取法:\n");for(color[0]=red;color[0]<=white;color[0]++){for(color[1]=red;color[1]<=white;color[1]++){if(color[0]!=color[1]){for(color[2]=red;color[2]<=white;color[2]++){if(color[2]!=color[0]&&color[2]!=color[1]){printf("|%d\t",++count);for(i=0;i<3;i++){colorprintf(color[i]);printf("\t");}printf("\n");}}}}}return 0;}
void colorprintf(enum Color color)
{switch(color){ case blue:  setcolor(BLUE);printf("蓝球");break;    //蓝色 case green: setcolor(GREEN);printf("绿球");break;  //绿色 case red:  setcolor(RED); printf("红球");break;//红球 case yellow:setcolor(YELLOW);printf("黄球");break;//黄色 case white: setcolor(WHITE);printf("白球");break;   //白色 }setcolor(WHITE);//还原系统色
}

打印的效果如下图:

牛刀小试——查找字符小程序

现在感觉打印彩色字符还有点小意思,至少花花绿绿的程序看起来就比黑白的炫很多,当然,打印彩色字符还有一个更有用的应用,就是查找类的程序,一般要表示查找到的字符(串)又不损坏原来的字符(串),那么改变字符串的颜色就是最好的选择。现在有一段英文文字,我们要查找单词"the"(当然你也可以在程序执行时输入你想要的单词)。
The man himself lay in the bed.For a long while we just stood there, looking down at the profoundand fleshless grin. The body had apparently once lain in the attitude of anembrace, but now the long sleep that outlasts love, that conquers even thegrimace of love, had cuckolded him. What was left of him, rotted beneath whatwas left of the nightshirt, had become inextricable from the bed in which helay; and upon him and upon the pillow beside him lay that even coating of thepatient and biding dust.Then we noticed that in the second pillow was the indentation of ahead. One of us lifted something from it, and leaning forward, that faint andinvisible dust dry and acrid in the nostrils, we saw a long strand of iron-grayhair.

【注】本段文字来源网络《献给艾米丽的玫瑰》
将这段文字导入文本文档,建立一个txt文件,假设就叫它sample.txt吧,放在C文件的同目录下,然后再将我们之前编好的color.h头文件放在C程序的同目录下,好戏开始:
main.c文件代码:

#include "color.h"
#include <string.h>
#include <stdlib.h>
void find_str(char *p,char *p0);
void move(char *p,int n);//
int main()
{char p[2000],p0[30],*ch;FILE *fp;//文件指针 printf("读入sample文件中...:\n");fp=fopen("sample.txt","r");if(fp==NULL){printf("读入文件失败!");return 2;//非正常返回 }for(ch=p;!feof(fp);ch++){*ch=fgetc(fp);putchar(*ch);//打印到文件夹 }*ch=0;//添加一个字符串结束符 printf("\n读入文件成功!\n需要查找的字符串:\n");gets(p0);if (strstr(p,p0)==NULL){printf("未找到该字符串!\n");return 1;//非正常返回 }find_str(p,p0);return 0;
}
void find_str(char *p,char *p0)
{char *p1,*p2;p1=p; p2=strstr(p,p0);while(p2!=NULL){move(p2,1);*p2=0;printf("%s",p1);p1=p2+1;p2+=strlen(p0)+1;move(p2,1);*p2=0;setcolor(LAKEBLUE);printf("%s",p1);//打印被查找的字符串setcolor(WHITE);p1=p2+1;//p1到达p2查找到的字符串的末尾p2=strstr(p1,p0);//p2沿着p1的起始位置继续查找 }printf("%s",p1);
}
void move(char *p,int n)//p为操作点处的地址,n为偏移量
{int i;char *q;if(n>0)//若n>0,数组后移,先操作的应该是数组最后一个元素{for(i=0,q=p+strlen(p);q-p>=0;q--)//从p字符串的结束符'\0'开始后移{*(q+n)=*q;}}else if(n<0)//若n<0,数组前移,先操作的是数组的第一个元素{for(i=0,q=p;q-p<=strlen(p);q++)//从第一个字符开始前移,一直移动到p字符串的结束符'\0'{*(q+n)=*q;}}//n=0时误操作
}

这个程序是字符串指针的应用,还是有点难度的,对初学者来看可能有点难理解,不过多写写就会发现也没有想象得那么难,你们如果运行这串代码,输出效果图就会如下图所示:

OK,看起来还不错,由于我们是按字符读入并且查找的,所以会把含有the的所有字符查找进去,比如说there,但如果我们稍稍修改一下我们存储的数据结构,将fgetc,fputc改成fgetc和fgets即可,它的操作将会比这个还要简单。当然,还有一些细节部分需要改动,由于本博客主要分享一下怎么打印彩色字符,在这里我就不再赘述了。
希望本文对您有帮助,谢谢阅读。

C语言打印彩色字符——以(枚举法+字符串查找)为例展示相关推荐

  1. 好玩!C语言打印彩色字符,还能闪烁!

    1. ANSI escape code 最近在研究日志打印组件easylogger,玩转各种彩色日志打印不亦乐乎,好奇心越来越重,遂深入研究,发现了一个非常神奇的东西:ANSI escape code ...

  2. 字符串匹配——枚举法

    字符串匹配--枚举法 给定主串T和模式串P,返回P在T中首次出现的位置,如果P不存在于T中,返回-1. 这样的问题就是字符串匹配问题,这里先给出枚举法的思想. 设主串T的长度为n,模式串P的长度为m. ...

  3. java查找字符的方法_Java字符串查找(3种方法)

    在给定的字符串中查找字符或字符串是比较常见的操作.字符串查找分为两种形式:一种是在字符串中获取匹配字符(串)的索引值,另一种是在字符串中获取指定索引位置的字符. 根据字符查找 String 类的 in ...

  4. c语言打印如来佛字符,JS控制台打印如来佛加持护身符

    JS控制台打印佛祖加持护身符 console.log([ " _ooOoo_", " o8888888o", " 88\" . \" ...

  5. [笔记]Go语言在Linux环境下输出彩色字符

    Go语言要打印彩色字符与Linux终端输出彩色字符类似,以黑色背景高亮绿色字体为例: fmt.Printf("\n %c[1;40;32m%s%c[0m\n\n", 0x1B, & ...

  6. Go语言在Linux环境下输出彩色字符

    Go语言在Linux环境下输出彩色字符 Go语言要打印彩色字符与Linux终端输出彩色字符类似 fmt.Printf("\n %c[1;40;32m%s%c[0m\n\n", 0x ...

  7. c语言枚举法课程设计报告,枚举法的程序实现及优化

    计新明 内容分析 本部分内容是教育科学出版社出版的必修1<数据与计算>第四单元第一节中的内容,整本书的思路是初始数据与计算.编程计算.认识数据.计算与问题解决.数据分析与人工智能,第四章属 ...

  8. Windows中使用C语言实现打印彩色文字到命令行窗口

    本文记录的是在Windows中使用C语言自定义一个可以打印彩色文字的printf函数,函数原型如下: int colorful_printf(WORD color, const char* forma ...

  9. C语言中打印扩展字符

    1.ASCII 打印字符:数字 32–126 分配给了能在键盘上找到的字符,当您查看或打印文档时就会出现.注:十进制32代表空格 ,十进制数字 127 代表 DELETE 命令.下面是ASCII码和相 ...

最新文章

  1. 单例测试模式中【饿汉式】与【懒汉式】的区别
  2. easyexcel导入时读不到数据_EasyExcel简单使用--导入excel数据
  3. VC.NET扩展Windows磁盘清理工具的功能
  4. 会话(cookie的使用,路径和Session的工作原理,使用)
  5. 如何改变数据库存储引擎
  6. 启动ipython出错_python-在异常情况下启动IPython shell
  7. Linux基础服务_DNS原理以及正反向DNS配置
  8. java 数据库字段_JAVA如何获得数据库的字段及字段类型
  9. LeetCode 1730. 获取食物的最短路径(BFS)
  10. 20道做完信心嫉妒膨胀的前端测试题
  11. HDU1847 Good Luck in CET-4 Everybody!【SG函数】
  12. Java Date Time 教程-System.currentTimeMillis()
  13. python视频车流量计数_【使用攻略】【图像识别】车流量统计(动态版)
  14. AutoCAD实用功能之查看xdata扩展属性
  15. 马哥linux架构班笔记,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  16. Python每日一记129列表换行
  17. js开发飞机大战需求文档
  18. 卜若的代码笔记-python系列-神经网络篇-第十四章:基于keras框架的男女性别识别
  19. java pdf_Java 生成 PDF 文档
  20. scratch学习——小猫踢足球

热门文章

  1. 音频自动增益 与 静音检测 算法 附完整C代码
  2. [.Net线程处理系列]专题五:线程同步——事件构造
  3. mac自己定义tree命令
  4. centos 修改ip地址
  5. 制作安装媒体来部署额外域控制器
  6. net自带二进制序列化,XML序列化和ProtoBuf序列化的压缩对比
  7. MPLS-L3×××中的公网访问
  8. Android模拟器访问本机服务IP地址
  9. 本地运行hadoop-Failed to locate the winutils binary in the hadoop binary path
  10. php 正则匹配 %3e,在shell脚本中使用正则表达式