C程序技能:彩色输出

发布时间:2024年01月16日

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

1. ANSI 转义序列

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

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

图片

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

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

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

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

图片

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

2. 16色配色方案介绍

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

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

图片

图片

图片

图片

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

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

3. 实例

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

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

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

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

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

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

源程序如下:

#include <stdio.h>
#include <windows.h>

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;
}

运行效果图。

图片

参考文献

[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

文章来源:https://blog.csdn.net/lhwhit/article/details/135614900
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。