探索篇 | C语言改变控制台输出内容颜色

 

控制台是什么

让代码『跑』起来

当代码执行的时候,会生成一个控制台命令框,把我们想要的内容打印显示。这个窗口我们称之为计算机控制台

命名行界面

cmd 命令提示符

控制台

改变控制台前景色、背景色

 

只需用system()函数调用一个cmd命令就行了。

函数原型: int system (const char* command);

例:

#include 
#include    //for system()

int main()
{
   //@color表示 设置控制台前景色和背景色,后跟参数
   system("@color 0a"); 
   printf("Hello World!\n");
   return 0;
}

运行结果:

探索篇 | C语言改变控制台输出内容颜色_第1张图片

比如 system("color 5E"); 这个就是紫色背景,淡黄色字体

 

如果要让输出的每一个单词的颜色都不同(或者说输出多种颜色的字),能不能呢?

have a try: 

#include 
#include    //for system()

int main()
{
   system("@color 0a"); //黑色背景 淡绿色文字
   printf("Hello World!\n");
   system("@color 0f"); //黑色背景 亮白色文字
   printf("Hello World!\n");
   system("@color 04"); //黑色背景 红色文字
   printf("Hello World!\n");
   return 0;
}

运行结果:

前面设定的颜色都被最后一种覆盖了,所以用system()函数不能实现输出多种颜色的文字

 

调用系统API设置控制台文字属性

又是一波代码强行袭来

#include 
#include 
int main()
{
   printf("Hello World!\n");   //此时输出的是默认属性的文字
   HANDLE hdl =  GetStdHandle(STD_OUTPUT_HANDLE);   //获取控制台句柄
   
   SetConsoleTextAttribute(hdl,  FOREGROUND_GREEN);   //设置文字属性:绿色
   printf("Hello World!\n");   //此时输出的是绿色的文字
   
   SetConsoleTextAttribute(hdl,  FOREGROUND_RED);  //设置文字属性:红色
   printf("Hello World!\n");   //此时输出的是红色的文字
  
   SetConsoleTextAttribute(hdl,  FOREGROUND_BLUE); //设置文字属性:蓝色
   printf("Hello World!\n");   //此时输出的是蓝色的文字

   SetConsoleTextAttribute(hdl,  FOREGROUND_INTENSITY);   //设置文字属性:高亮
   printf("Hello World!\n");   //此时输出的是高亮的文字

   SetConsoleTextAttribute(hdl,  FOREGROUND_BLUE | FOREGROUND_INTENSITY); 
   //设置文字属性:蓝色、高亮
   printf("Hello World!\n");   //此时输出的是亮色、加亮的文字

   SetConsoleTextAttribute(hdl,  FOREGROUND_BLUE | FOREGROUND_GREEN |  FOREGROUND_RED);  //设置文字属性:白色
   printf("Hello World!\n");   //此时输出的是白色的文字   也就是说这三种颜色属性可以叠加

   SetConsoleTextAttribute(hdl,  FOREGROUND_BLUE | FOREGROUND_GREEN |  FOREGROUND_RED | FOREGROUND_INTENSITY);   //设置文字属性:白色、高亮
   printf("Hello World!\n");   //此时输出的是白色、加亮的文字

   CloseHandle(hdl); //要记得关闭Handle,释放 Handle 资源
   return 0;
}     

运行结果:

既然有 FORE 颜色(前景色(字体的颜色)),自然也就存在 BACK 颜色(背景色)

have a try: 

#include 
#include 
int main()
{
   printf("Hello World!\n");   //此时输出的是默认属性的文字

   HANDLE hdl =  GetStdHandle(STD_OUTPUT_HANDLE);   //获得控制台句柄

   SetConsoleTextAttribute(hdl,  BACKGROUND_RED);  //设置文字属性:控制台背景色,红色底色
   printf("Hello World!\n");   //此时输出红色的底色,只是文字的底色,不是控制台的背景色

   SetConsoleTextAttribute(hdl,  FOREGROUND_GREEN | BACKGROUND_RED |  BACKGROUND_BLUE | BACKGROUND_GREEN |  BACKGROUND_INTENSITY);
   //设置文字属性:绿色,底色:白色、加亮,
   printf("Hello World!\n");   //此时输出红色的底色,只是文字的底色不是控制台的背景色

   return 0;
}

运行结果:

SetConsoleTextAttribute() 函数第二个参数可以有文字的颜色、底色以及加亮几种,颜色只有:红、绿、蓝三种,要想显示其他颜色,可以利用光的三原色进行叠加

第二个参数总共有八个宏定义:

  • 文字本身颜色: FOREGROUND_RED、FOREGROUND_GREEN、FOREGROUND_BLUE

  • 文字底色:     BACKGROUND_RED、BACKGROUND_GREEN、BACKGROUND_BLUE

  • 文字加亮:     FOREGROUND_INTENSITY

  • 底色加亮:     BACKGROUND_INTENSITY

以上对文字属性进行设置的函数及宏:都在头文件里已定义 


常见问题汇总

  • 为什么我们开始时用的是do-while循环:

因为,我们第一次选择play就要进到游戏中去,第一次选择退出,就直接退出去了。

  • 编译出错:***函数重定义,不同的基类型

因为:函数的排列出现问题,(.c) 文件中需要注意『函数定义在前,函数使用在后』

  • 其他问题

可以直接在评论区留言


感谢阅读本篇博客,如果有不错的建议或意见,欢迎在评论区留言,喜欢的话,麻烦点个赞和关注哦~~~

 

你可能感兴趣的:(01.C语言,12.探索篇)