C中的控制台着色无法正常工作

时间:2016-06-23 18:50:25

标签: c colors windows-7 console

我正在尝试用C编写一个简单的应用程序,我对C的概念相当新,所以如果这很简单,我会道歉。我正在运行Windows 7并且有类似的东西:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <time.h>

#define Green   "\33[0:32m"
#define Yellow  "\33[0:33m"
#define Reset   "\33[0m"
#define Log_info(X) printf("[Info] %s %s %s\n", Green,X,Reset)
#define Log_warn(X) printf("[Warning] %s %s %s\n",Yellow,X,Reset)
#define Seperator() printf("----------------------------------------------------\n")

void info(const char *message)
{  
    Log_info(message);
    Seperator();
}

void warn(const char *message)
{
    Log_warn(message);
    Seperator();
}

int main(int argc, char *argv[])
{
    warn("test the warning output for the console");
    info("test the information output for the console");
}

但是,当我尝试运行信息处理时,我得到以下内容:

[Warning] ←[0:33m test the warning output for the console ←[0m
----------------------------------------------------
[Info] ←[0:32m test the information output for the console ←[0m
----------------------------------------------------

我做错了什么不是颜色协调输出,而是使用箭头?如何对信息进行颜色协调,黄色表示警告,绿色表示信息?

我想到主要使用来自Javascript(\33[0:32m)和Ruby(\033[32m #<=Green)的\e[32m #<=Green

1 个答案:

答案 0 :(得分:3)

您没有使用正确的颜色代码。这些颜色代码仅适用于具有兼容终端的Unix系统。

由于您需要特定于C和Windows的解决方案,我建议您使用Win32 API中的SetConsoleTextAttribute()函数。您需要获取控制台的句柄,然后使用适当的属性传递它。

举个简单的例子:

/* Change console text color, then restore it back to normal. */
#include <stdio.h>
#include <windows.h>

int main() {
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO consoleInfo;
    WORD saved_attributes;

    /* Save current attributes */
    GetConsoleScreenBufferInfo(hConsole, &consoleInfo);
    saved_attributes = consoleInfo.wAttributes;

    SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE);
    printf("This is some nice COLORFUL text, isn't it?");

    /* Restore original attributes */
    SetConsoleTextAttribute(hConsole, saved_attributes);
    printf("Back to normal");

    return 0;
}

有关可用属性的更多信息,请查看here