C程序技能:彩色输出

在终端上输出的字体总是单色,但在一些场景彩色输出更能满足需求,在Linux环境中,可以使用终端控制字符来设置输出字符的颜色,在部分版本的Windows系统中也可以使用。本文参考一些文献简要介绍一下在Windows下彩色输出的方法。

1. ANSI 转义序列

在终端上不仅能够显示程序的输出,还可以以不同的配色方案输出。在实际应用中,常常使用两种配色方案:一是16 色(8背景+8前景),而是255 色。

16色的配色方案包含两个颜色设置,每个8色,一个是背景色,一个是字体色(也即前景色),这个配色方案的语法格式如图1所示[1]。

C程序技能:彩色输出_第1张图片

图1 16色配色方案语法格式

例如:\033[1;32;40m

此处的 \033[ 是转义字符,1代表高亮,32代表前景色为绿色,背景色为黑色。

256色的配色方案的语法格式如图2所示,具体用法参看文献1

C程序技能:彩色输出_第2张图片

图2 256色配色方案语法格式

2. 16色配色方案介绍

(1)在终端输出彩色文字的语法

用图1的格式设置彩色输出,然后输出文字,最后可以设置彩色格式输出结束,使用的控制字符为:\033[0m。一下图片均来自文献2

C程序技能:彩色输出_第3张图片

C程序技能:彩色输出_第4张图片

C程序技能:彩色输出_第5张图片

C程序技能:彩色输出_第6张图片

(2)在终端输出彩色文字解决方案

适用于Windows 10的解决方案是在输出文字前执行system("")函数,执行后允许在本机的命令提示符和Powershell中输出彩色文字。

3. 实例

输出一个心图案,然后在图案中间用不同颜色输出C程序设计与训练文字。

文献3介绍了如何保存光标位置和恢复光标位置的控制码。

ESC 7:保存光标位置在存储器中

ESC 8:从存储器中恢复光标位置

ESC [ A:光标向上移动行数

ESC [ C:光标向右移动位置

源程序如下:

#include 
#include 

int main()
{
   system(""); // 设置终端可以显示彩色文本 
   printf("\033[1;31m"); // 高亮红字 
   for(double y=1.5; y>-1.5; y-=0.1){
     for(double x=-1.5; x<1.5; x+=0.05)  {
        double a = x*x+y*y-1;
        putchar(a*a*a-x*x*y*y*y <= 0.0f? '+' : ' ');
     }
     putchar('\n');
   }   
   printf("\033[0;41m"); // 默认,背景红色 
   printf("\0337\033[19A\033[23C"); // 设置光标位置:向上移动19行,向右移动23个位置 
   printf(" C程序设计与训练 ");
   printf("\0338");   // 恢复光标位置 
   printf("\033[0m"); // 彩色文本输出结束 
   return 0;
}

运行效果图。

C程序技能:彩色输出_第7张图片

参考文献

[1]https://blog.csdn.net/star6112/article/details/129714869

[2]https://blog.csdn.net/weixin_69553582/article/details/125700943

[3]https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences

你可能感兴趣的:(c语言,开发语言)