改变控制台的输出颜色

一:

在调试程序时,有时候要输出大量数据,如果让printf/fprintf改变输出数据的颜色,那观察数据就方便多了。

终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。
转义序列是以 ESC 开头,可以用 \033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27, = 用八进制表示的 33)。

\033[显示方式;前景色;背景色m

显示方式:0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、5(闪烁)、25(非闪烁)、7(反显)、27(非反显)
前景色:30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋红)、36(青色)、37(白色)
背景色:40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋红)、46(青色)、47(白色)

\033[0m 默认
\033[1;32;40m 绿色
033[1;31;40m 红色

printf( "\033[1;31;40m 输出红色字符 \033[0m" )


二:

如果是在windows平台下,这里面只需要用到Windows API的一个函数:SetConsoleTextAttribute

同样可以达到相同的目的

msdn上的说明如下:
BOOL SetConsoleTextAttribute(
  HANDLE hConsoleOutput,  // handle to screen buffer
  WORD wAttributes        // text and background colors
);
Parameters
hConsoleOutput
[in] Handle to a console screen buffer. The handle must have GENERIC_READ access.
wAttributes
[in] Specifies the foreground and background color attributes. Any combination of the following values can be specified: FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED, and BACKGROUND_INTENSITY. For example, the following combination of values produces white text on a black background:
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE 
Return Values

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

To determine the current color attributes of a screen buffer, call the GetConsoleScreenBufferInfo function.

 

我们的使用如下:

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

BOOL SetConsolColor(DWORD stdHandle, DWORD wAttributes=0x07UL)
{
    HANDLE handle = GetStdHandle(stdHandle);
    if(NULL == handle) {
        return;
    }
    return SetConsoleTextAttribute(handle, wAttributes);
}
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsolColor(STD_OUTPUT_HANDLE, FOREGROUND_RED|BACKGROUND_GREEN);
    printf("输出:绿底红字\n");
    //SetConsolColor(STD_OUTPUT_HANDLE, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    SetConsolColor(STD_OUTPUT_HANDLE);
    printf("默认:黑底白字\n");
    return 0;
}

输出效果:



  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值