是否可以在简单的ANSI C中为控制台输出着色?没有外部库?这可以在Windows,Linux或Mac OS X中完成吗?
答案 0 :(得分:7)
只是简单的ANSI C?
没有。 C标准不假定标准输出是控制台或有颜色。
可以在Windows,Linux或Mac OS X中完成吗?
是。有关Linux和Mac OS X的信息,请参阅How can I print to the console in color on Mac OS X in a cross-platform manner?。
对于Windows,如果您想避免使用外部库,则可能需要直接访问Console Functions。
答案 1 :(得分:4)
是的,在Linux / Mac中,可以使用ANSI C89。 您可以操纵文本的字体和颜色。 使用以下命令:
printf("%c[0;00mHello, world!\n", 27); /* White color */
printf("%c[1;33mHello, world!\n", 27); /* Yellowish color */
printf("%c[1;34mHello, world!\n", 27); /* Blueish color */
注意“;”的左侧部分(数字0,1是)操纵文本字体, “;”的右边部分操纵颜色。您可以自己试验并找出新的颜色。
此代码使用"-ansi -pedantic"
命令编译,没有警告也没有错误。
*****编辑***** 在基于Windows的系统中,您可以使用以下示例实现彩色控制台文本/文本背景:
#include <stdio.h>
#include <windows.h>
int main(void)
{
/* Point to our console */
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
int i = 0;
/* Iterate through colors */
for(; i < 255; i++)
{ /* i stands for color type: could refer to actual text color or background color of text */
SetConsoleTextAttribute(hConsole, i);
printf("Colorful text");
}
getchar();
return 0;
}
祝你好运!
答案 2 :(得分:1)
在posix系统上,您可以使用ANSI escape sequences。
在Windows上它有点复杂,有多种解决方案:
使用Win32 API在使用SetConsoleTextAttribute 和friends打印到控制台之前设置输出颜色。这比简单地在字符串中嵌入ANSI转义序列要麻烦得多,并要求您将Windows作为一种特殊情况处理。
旧版本的Windows包含ANSI.SYS,但在以后的版本中已将其删除。 ANSICON是替代它,您可以安装以在Windows命令提示符下获得ANSI颜色代码支持:https://github.com/adoxa/ansicon
这是一个可以轻松集成到任何现有项目中的项目,而无需依赖ANSI.SYS或ANSICON进行安装。
它需要一个包含ANSI转义序列的字符串,并将它们转换为相关的Win32等效API函数:https://github.com/mattn/ansicolor-w32.c
答案 3 :(得分:0)
答案 4 :(得分:0)
ISO C确实对控制台能够显示颜色一无所知,但是基于转义字符控制,控制台功能管理有一个ANSI规范。这在Linux和Mac OS X中透明地工作,但在Windows中失败,您需要使用Win32 API的原语。
您可以在下面找到一个非常简单的库,它允许以多平台方式(Win32和类Unix系统)清除屏幕,显示颜色并将光标定位在特定坐标中。
它带有普通的C源文件(.c和.h),西班牙语的doxygen文档(doc /)和一个简单的demo(main.c)