Windows-如何控制printf输出文字的颜色?

Windows-如何控制printf输出文字的颜色?

浮生未歇 发布于 2017-04-13 字数 103 浏览 1283 回复 2

需要用printf输出文本时,按照需要不同的位置或者文字,输出文字颜色不同,应该如何才能达到这个目的?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

归属感 2017-10-18 2 楼

我搜索整理了下关于printf()函数的用法,给printf的输出加上些特效比如颜色,可以让打印信息更鲜明,在debug的时候特别有用。
颜色:

#define NONE "33[m"
#define RED "33[0;32;31m"
#define LIGHT_RED "33[1;31m"
#define GREEN "33[0;32;32m"
#define LIGHT_GREEN "33[1;32m"
#define BLUE "33[0;32;34m"
#define LIGHT_BLUE "33[1;34m"
#define DARY_GRAY "33[1;30m"
#define CYAN "33[0;36m"
#define LIGHT_CYAN "33[1;36m"
#define PURPLE "33[0;35m"
#define LIGHT_PURPLE "33[1;35m"
#define BROWN "33[0;33m"
#define YELLOW "33[1;33m"
#define LIGHT_GRAY "33[0;37m"
#define WHITE "33[1;37m"

比如:

printf("33[31m ####----->> 33[32m" "hellon" "33[m");

颜色分为背景色和字体色,30~39用来设置字体色,40~49设置背景:

 背景色 字体色
40: 黑 30: 黑
41: 红 31: 红
42: 绿 32: 绿
43: 黄 33: 黄
44: 蓝 34: 蓝
45: 紫 35: 紫
46: 深绿 36: 深绿
47: 白色 37: 白色

记得在打印完之后,把颜色恢复成NONE,不然再后面的打印都会跟着变色。

另外,还可以加一些ANSI控制码。加颜色只是以下控制码中的一种:

 33[0m 关闭所有属性
33[1m 设置高亮度
33[4m 下划线
33[5m 闪烁
33[7m 反显
33[8m 消隐
33[30m -- 33[37m 设置前景色
33[40m -- 33[47m 设置背景色
33[nA 光标上移n行
33[nB 光标下移n行
33[nC 光标右移n行
33[nD 光标左移n行
33[y;xH设置光标位置
33[2J 清屏
33[K 清除从光标到行尾的内容
33[s 保存光标位置
33[u 恢复光标位置
33[?25l 隐藏光标
33[?25h 显示光标

printf( CYAN "current function is %s " GREEN " file line is %dn" NONE,
__FUNCTION__, __LINE__ );
fprintf(stderr, RED "current function is %s " BLUE " file line is %dn" NONE,
__FUNCTION__, __LINE__ );
return 0;

夜无邪 2017-07-02 1 楼

下面简单利用 count 输出:

int main(int argc, char* argv[])
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
        FOREGROUND_RED);
    cout<<"Hello"<<endl;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    cout<<"World"<<endl;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
        FOREGROUND_GREEN | FOREGROUND_BLUE);
    cout<<"World"<<endl;
 return 0;
}

再给你发个好玩的,邪八的。http://forum.eviloctal.com/thread-40509-1-1.html
通过这个,你可以了解Printf的底层实现机制、挖掘底层原理的方法。怎么样"邪八"不错吧。