大家好,又见面了,我是你们的朋友全栈君。
如果学C语言久了,难免会对弹出的黑窗口感到厌烦,那这时候如果能改一下黑窗口的背景颜色和字体颜色,也许会给自己一个好一点的心情。废话不多说,现在开始教你怎么简单地改变窗口的字体颜色和背景颜色。
一、首先,当然是引入头文件,除了常规的输入输出<stdio.h>,还要将<windows.h>引入,因为要调用系统的函数;
代码语言:javascript复制#include <stdio.h>
#include <windows.h>
二、标准库定义了好多的颜色常量,不过都很长不好记,我们先来记一下常用的,简单地常量值代表的颜色;
0 = 黑色 1 = 蓝色 2 = 绿色 3 = 湖蓝色 4 = 红色 5 = 紫色 6 = 黄色 7 = 白色 8 = 灰色 9 = 淡蓝色 A = 淡绿色 B = 淡浅绿色 C = 淡红色 D = 淡紫色 E = 淡黄色 F = 亮白色
三、为了方便,可以将颜色用一个枚举来定义
代码语言:javascript复制enum Color
{
black, blue, green, lakeBlue, red, purple, yellow, white, gray,
lightBlue, lightGreen, lightSimpleGreen, lightRed, lightPurple, lightYellow, brightWhite
};
四、知道了颜色的常量值,我们就可以直接调用system(“color 07”)函数来改变背景色和字体色,其中,”color 07″中的0和7代表的是两个数字,上面第二点有说到,0是黑色,7是白色,这是调试窗口的默认颜色,我们可以将”color 07″改成”color 12″就会看到背景色变为了蓝色,字体变为了绿色。知道了原理后,你就可以不用继续往下看,直接用system(“color 前景色值背景色值”)函数来改变颜色了。不过为了更好地运用和记忆,可以将这个系统函数封装一下;
代码语言:javascript复制void setColor(unsigned short backColor=0, unsigned short textColor=7){
char command[9]="color 07"; //默认颜色
command[6]='0' backColor; //将backColor变量改为字符型
command[7]='0' textColor; //将textColor变量改为字符型
system(command); //调用系统函数
}
五、这时候可以不用system函数了,可以调用setColor(1,2)函数来将窗口背景色改为蓝色,将字体改成绿色,另外,因为之前设置了枚举,调用setColor(green,red)也有一样的效果;
代码语言:javascript复制setColor(1,2);
六、以上代码合并起来:
代码语言:javascript复制#include <stdio.h>
#include <windows.h>
enum Color
{
black, blue, green, lakeBlue, red, purple, yellow, white, gray,
lightBlue, lightGreen, lightSimpleGreen, lightRed, lightPurple, lightYellow, brightWhite
};
void setColor(unsigned short textColor=0, unsigned short backColor=7){
char command[9]="color 07"; //默认颜色
command[6]='0' backColor; //将backColor变量改为字符型
command[7]='0' textColor; //将textColor变量改为字符型
system(command); //调用系统函数
}
int main(){
setColor(1,2);
//setColor(blue,green);
printf("蓝色背景,绿色字体nn");
}
七、运行效果如下:
八、这样子还不过瘾,只是单纯把系统函数封装一下而已,我又写了一个好玩的一点的程序(可能我比较无聊),你们可以复制粘贴玩一下:
代码语言:javascript复制#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
enum Color
{
black, blue, green, lakeBlue, red, purple, yellow, white, gray,
lightBlue, lightGreen, lightSimpleGreen, lightRed, lightPurple, lightYellow, brightWhite
};
void setColor(unsigned short backColor=0, unsigned short textColor=7){
char command[9]="color 07"; //默认颜色
command[6]='0' backColor; //将backColor变量改为字符型
command[7]='0' textColor; //将textColor变量改为字符型
system(command); //调用系统函数
}
int main(){
for(int i=0; i<10; i ){
if(i%3!=0){
printf(" ");
}
else{
printf("nn");
}
setColor(black,red);
printf(" 病毒入侵! ( Attacked ) ");
Sleep(100);
setColor(black,green);
printf(" 已查杀病毒( Defend ) ");
Sleep(200);
}
printf("nnn病毒已清除完毕!nnn");
}
九、调用system(“color 07”)封装起来的函数每次都是全局变颜色,对于只想改变字体颜色,并且每次改变都不影响到上一次的颜色的话,可以参考下面的代码,运行结果跟上面的第九条稍微不一样,有兴趣的可以研究一下:
代码语言:javascript复制#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
void color(const unsigned short textColor)
{
if(textColor>=0 && textColor<=15)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), textColor);
else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
int main(){
for(int i=0; i<10; i ){
if(i%3!=0){
printf(" ");
}
else{
printf("nn");
}
color(4);
printf(" 病毒入侵! ( Attacked ) ");
Sleep(100);
color(2);
printf(" 已查杀病毒( Defend ) ");
Sleep(200);
}
color(2);
printf("nnn病毒已清除完毕!nnn");
color(0);
}
上面第九条的color函数是我很久之前看到的一个博主写的并且解释得很详细,突然找不回来那篇文章的地址了,我不是很精通C语言,也解释不清楚其中的GetStdHandle(STD_OUTPUT_HANDLE)作为SetConsoleTextAttribute函数的第一个变量的意思了,有兴趣的可以去详细地查一下。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151578.html原文链接:https://javaforall.cn