我正在尝试用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
。
答案 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。