如何在C语言中将文字显示为花里胡哨的多种颜色

2023-10-27

        Hello大家好!最近刚刚做完C语言的课程设计。在评分标准中有一项是展示界面美观整洁。学前端的我对花里胡哨的界面情有独钟,这里为大家简单介绍三种改变字体颜色的方法。

        注意:本文中所有演示截图均来自VS 2022。

目录

 改变C语言显示界面字体颜色的三种方式

  system颜色函数 

  \033特殊转义字符 

 SetConsoleTextAttribute函数  


 改变C语言显示界面字体颜色的三种方式

  system颜色函数 

        首先介绍的是最简单的一种更改颜色方式。但简单的同时,他的效果不会太灵活。 

        system 函数包含于  #include<stdlib.h>  头文件中。设置默认的控制台前景和背景颜色是它众多功能之一。基本语法如下:

    system("color xy");

         其中,x 和 y 为两个十六进制数字,分别用于设定背景色以及前景色(字体颜色)。注意 x 和 y 两个字符间没有空格也没有逗号,格式不标准时运行程序会打印出该函数的用法。x , y可以对应以下任意值:

0 = 黑色 4 = 红色 8 = 灰色 C = 淡红色
1 = 蓝色 5 = 紫色 9 = 淡蓝色 D = 淡紫色
2 = 绿色 6 = 黄色 A = 淡绿色 E = 淡黄色
3 = 浅绿色 7 = 白色 B = 浅淡绿色 F = 亮白色

        如果没有给定任何参数,此命令会将颜色还原到 CMD.EXE 启动时的颜色。这个值来自当前控制台窗口、/T 命令行开关或 DefaultColor 注册表值。

        如果尝试使用相同的前景和背景颜色来执行COLOR 命令,COLOR 命令会将 ERRORLEVEL 设置为 1。

        值得注意的是,你可能在网上看到过别人使用 system 函数时引用了 #include<Windows.h> 头文件,并成功使用了 system 函数。#include<Windows.h> 主要针对操作系统,包含大多数对系统有用的函数,如 Sleepsystem 等。#include<stdlib.h>主要包含了一些宏指令和动态函数,如free(),malloc()等。笔者猜想,两个头文可能包含有少数相同的函数,遇到这种函数的时候,两个头文件用哪个都可以。(凭空猜想,欢迎评论区指正)

        现在我们运行一下程序试试吧!

    #include<stdio.h>
    #include<windows.h>
    int main()
    {
    	system("color EC");
    	printf("这是第一行\n");
	    system("color 74");
	    printf("这是第二行");
	    return 0;	
    }

结果如下: 

运行结果如图(编译器说这个粉唧唧的颜色是白色那它就是白色)

        哇缺!怎么回事!背景色是 7(白色),前景色是 4(红色),代码第五行完全没有参与感捏!这是因为 system 函数加上 color 指令 是对整个控制台的文本属性进行改变,只能把整个控制台改成一种颜色,无法达到同一页面显示多种颜色的效果。这也就是刚刚介绍这个函数时说“他的功能不会太灵活”的原因。那么有没有一种方式可以更加灵活地改变字体颜色呢?为此,我们引入下面两个方法。

  \033特殊转义字符 

         what is \033 ?

        八进制的 \033 即 ESC 符号,Windows 中,ESC的十进制为 \027,十六进制为 \x1b。学过 HTML 的同学可能会觉得 \033 的用法和前端的标签有些像,常常成对儿出现。标准语法如下:

    \033[参数1;参数2;参数3m

        该转义字符直接应用于printf()函数中,这串代码生效即意味着从程序执行到这里开始,后面所有的屏幕打印字符均以该代码指定的效果显示。所以一般使用\033 进行颜色改变后,应当使用 \033[0m 进行还原。参数 1 指定显示方式,参数 2 指定前景色(字体颜色),参数 3 指定背景色。参数 3 后紧接小写字母 m 表示结束。相关参数值与对应效果如下:

单值控制码(与颜色改变无关且不能与其他控制码同时使用) 

控制码

效果
\033[nA 光标上移 n 行
\033[nB 光标下移 n 行
\033[nC 光标右移 n 列
\033[nD 光标左移 n 列
\033[y;xH 设置光标位置
\033[2J 清屏
\033[k 设置光标位置(y行,x列)
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标

字体颜色(前景色)

控制码 字体效果
\033[0m 关闭所有属性
\033[1m 设置字体高亮度
\033[2m 低亮(减弱)显示
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m 黑色
\033[31m 红色
\033[32m 绿色
\033[33m 黄色
\033[34m 蓝色
\033[35m 紫色
\033[36m 浅蓝色
\033[37m 白色

 背景颜色

控制码 背景效果
\033[40m 黑色
\033[41m 红色
\033[42m 绿色
\033[43m 黄色
\033[44m 蓝色
\033[45m 紫色
\033[46m 浅蓝色
\033[47m 白色

         你可能注意到了,显示方式,前景色,背景色不同含义的数值都是唯一的且没有重复。所以三个参数的书写先后顺序不做硬性要求,不过还是建议按照默认规范的格式书写。三个参数可以只写一到两个。

        下面做一个简单的示范:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include<stdio.h>
    int main()
    {
    	printf("\033[43;1m高亮文字黄色背景\n");
    	printf("这是第二行\033[0m\n");
	    printf("\033[43;1m高亮文字黄色背景\033[0m\n");
	    printf("这是第四行\033[0m\n");
	    printf("这一行\033[43;1m作为测试\033[0m\n");
	    return 0;
    }

 

        \033在笔者无论蓝色还是红色的Dev C++中都无法正常工作,暂时没有找到原因和解决办法。有没有大佬可以评论区解答一手?

 SetConsoleTextAttribute函数  

        函数头文件:#include<Windows.h>

        和\033类似地,代码执行到该函数时,后面所有的屏幕打印字符均以该代码指定的效果显示。基本语法如下:

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),前景色 | 背景色 | 前景加强 | 背景加强);

        关于这个代码的用法,请戳下面链接查看大佬详解~

        (我就是从这位大佬这里学的这个函数的用法) 

        戳我,看大佬的讲解。

        本篇文章到此就结束咯,希望能对你有所帮助。浅点一手关注,下一周分享更多能把美观分拿满的小技巧。

        留存问题:为什么\033代码在Dev C++中无法使用?期待在评论区得到大佬的解答。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在C语言中将文字显示为花里胡哨的多种颜色 的相关文章

随机推荐

  • Java中如何创建一个枚举Enum类

    从jdk5出现了枚举类后 定义一些字典值可以使用枚举类型 枚举常用的方法是 values 对枚举中的常量值进行遍历 valueof String name 根据名称获取枚举类中定义的常量值 要求字符串跟枚举的常量名必须一致 获取枚举类中的常
  • Node创建应用

    github地址 https github com lily1010 Node learn tree master test 一 使用node的意义 使用 Node js 时 我们不仅仅 在实现一个JS应用 同时还实现了整个 HTTP 服务
  • 国际版阿里云/腾讯云免费:阿里云产品-弹性核算简介(依据官网转载)

    阿里云产品 弹性核算简介 依据官网转载 云服务器ECS Elastic Compute Service 是阿里云供给的功能杰出 安稳牢靠 弹性扩展的IaaS Infrastructure as a Service 等级云核算服务 实例 等同
  • Java复习-16-多态性

    多态性 在Java中对于多态性有两种实现的模式 方法的多态性 方法的重载 同一个方法名称可以根据传入的参数类型和个数的不同 进行不同的处理 方法的覆写 同一个方法可能根据使用子类的不同 由不同的实现 对象的多态性 父子实例之间的转换处理 有
  • 机器学习类比赛中经常用到的一些函数和知识点

    文章目录 豆瓣 清华源命令 pip升级命令 画图plot汉字显示不出 python控制台打印结果省略的问题 enumerate pandas描述数据基本分布情况 isin 判断值是否存在 某两个特征之间的关联性 np corrcoef fo
  • GLib学习

    Gstreamer 基础 学习博客 一 glib glib介绍 1 1 类型介绍 glib的类型定义在gtypes h文件中 关键定义如下 1 1 1 不规则类型 gboolean gpointer gconstpointer gchar
  • 品味树莓派:GPIO Zero库进阶使用

    文章目录 目的 进阶功能 Source Values模式 Device Source Tools 高级设备类库 异常 Internal Devices Pin Factory 总结 目的 GPIO Zero库在传统的GPIO使用基础上还提供
  • 性能测试简介

    性能测试是通过自动化的测试工具模拟多种正常 峰值以及异常负载条件来对系统的各项性能指标进行测试 负载测试和压力测试都属于性能测试 两者可以结合进行 通过负载测试 确定在各种工作负载下系统的性能 第三方测试目标是测试当负载逐渐增加时 系统各项
  • Dubbo笔记 ⑳ :消费者的异步调用

    文章目录 一 前言 1 流程概述 二 关键类 1 DefaultFuture 1 1 DefaultFuture 的构造 1 2 DefaultFuture newFuture 1 3 DefaultFuture received 1 4
  • Windows上利用Zerotier配置moon无法连接

    问题描述 按照相关教程 1 2 配置好moon之后 需要在各客户端zerotier上配置 并连接此服务器 在Windows电脑中 用两种方法将机器连接上 moon 节点 方法一 在打开服务程序services msc 找到服务 ZeroTi
  • 内嵌Python import时undefined symbol错误及解决

    内嵌Python import时undefined symbol错误及解决 以下代码 include lt Python h gt include lt stdio h gt include lt stdlib h gt int main
  • 动态分区分配算法(First Fit,Next Fit,Best Fit,Worst Fit)

    一 动态分区分配算法的背景 为了能将用户程序装入内存 必须为它分配一定大小的内存空间 连续分配方式是最早出现的一种存储器分配方式 曾被广泛应用于上世纪60 80 年代的OS中 该分配万式为个用户程序分配 一个连续的内存空间 即程序中代码或数
  • 十大相似图片搜索网站(以图搜图)

    十大相似图片搜索网站 以图搜图 2011 04 13 21 07 56 分类 默认分类 标签 以图搜图 图片搜索 搜图 百度搜图 搜索引擎 举报 字号 订阅 下载LOFTER客户端 如何凭着一张现有图片找出它的原始图片 或者是凭着一张小的缩
  • ROS-Noetic版本的安装(Ubuntu20.04环境)

    ROS安装 关于ROS的安装已经有很多好的博文供以参考 本文总结了一些安装过程中可能出现的报错情况已经解决方法 许多博文的教程步骤大差不差 建议是直接先按照官方步骤走 遇到问题再一步步解决 ROS官方的参考链接 http wiki ros
  • python中mgrid和meshgrid的不同

    在生成插值数据时 有时会用到 mgrid 和 meshgrid 两个函数 关于插值函数的应用参见 https blog csdn net gsgbgxp article details 116145501 t7 关于两者的差别可参见 htt
  • 李宏毅 机器学习 2016 秋:2、Regression

    二 Regression Case Study 我们今天要讲的是 Regression 等一下我会举一个例子 来讲 Regression 是怎么做的 顺便引出一些 machine learning 里面 常见的重要观念 那 regressi
  • DNS服务器

    DNS服务简介 DNS Domain Nmae Server 域名服务系统 对域名进行解析 1 域名空间 根域 代表域名命名空间的根 顶级域 直接处于根域下面 以国家或地区命名 二级域 在顶级域下面 子域 主机 FQDN完全合格的域名 如w
  • Mybatis-plus查询条件拒绝自动去重

    问题描述 当进行多表数据关联时候 使用mybatis结果集封装数据 mybatis会将主键id作为map的key值 如果后面有重复的主键id 那么将会覆盖之前的数据 很显然这不是多表关联查询数据想要看到的结果 如此以来 最终结果会比实际结果
  • 浏览器的选择建议,按照这些建议选,总能找到合适的

    浏览器可以说是电脑的标配了 几乎每台电脑都安装有浏览器 最近 很多朋友询问哪些浏览器比较好用啊 今天给大家分享一下浏览器的选择建议 让大家都能选到适合自己的浏览器 同时 系统全面的介绍各家浏览器的特点 哪些值得我们花时间试用 浏览器的选择建
  • 如何在C语言中将文字显示为花里胡哨的多种颜色

    Hello大家好 最近刚刚做完C语言的课程设计 在评分标准中有一项是展示界面美观整洁 学前端的我对花里胡哨的界面情有独钟 这里为大家简单介绍三种改变字体颜色的方法 注意 本文中所有演示截图均来自VS 2022 目录 改变C语言显示界面字体颜