是否可以仅使用纯 ANSI C 为控制台输出着色?没有外部库?这可以在 Windows、Linux 或 Mac OS X 中完成吗?
只是简单的 ANSI C?
不。 C 标准不假设标准输出是控制台或有颜色。
这可以在 Windows、Linux 或 Mac OS X 中完成吗?
是的。请参阅如何以跨平台方式在 Mac OS X 上以彩色方式打印到控制台?(适用于 Linux 和 Mac OS X)。
对于 Windows,如果您想避免外部库,您可能需要直接访问控制台功能。
是的,在 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;
}
祝你好运!
在 Linux 中,如果您知道特定于 shell 的控制代码/转义序列,则可以完成此操作。
在 posix 系统上,您可以使用 ANSI 转义序列。
在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
确实,ISO C 对控制台是否能够显示颜色一无所知,但是有一个基于转义字符控制的控制台功能管理 ANSI 规范。这在 Linux 和 Mac OS X 中透明地工作,但在 Windows 中失败,在 Windows 中您需要使用 Win32 API 的原语。
您可以在下面找到一个非常简单的库,它允许以多平台方式(Win32 和类 Unix 系统)清除屏幕、显示颜色并将光标定位在特定坐标中。
它附带纯 C 源文件(.c 和 .h)、西班牙语 doxygen 文档 (doc/) 和一个简单的演示 (main.c)