ANSI C中的颜色控制台?

ANSI C中的颜色控制台?,c,console,colors,C,Console,Colors,是否可以仅用普通的ANSI C为控制台输出着色?没有外部图书馆?这可以在Windows、Linux或Mac OS X中实现吗 只是普通的ANSI C 不可以。C标准没有假定标准输出是控制台或有颜色 这可以在Windows、Linux或Mac OS X中实现吗 对。有关Linux和Mac OS X,请参阅 对于Windows,如果希望避免使用外部库,则可能需要直接访问。在Linux中,如果您知道特定于shell的控制代码/转义序列,则可以这样做。ISO C确实不知道控制台能够显示颜色,但是,基于转

是否可以仅用普通的ANSI C为控制台输出着色?没有外部图书馆?这可以在Windows、Linux或Mac OS X中实现吗

只是普通的ANSI C

不可以。C标准没有假定标准输出是控制台或有颜色

这可以在Windows、Linux或Mac OS X中实现吗

对。有关Linux和Mac OS X,请参阅


对于Windows,如果希望避免使用外部库,则可能需要直接访问。

在Linux中,如果您知道特定于shell的控制代码/转义序列,则可以这样做。

ISO C确实不知道控制台能够显示颜色,但是,基于转义字符控件的控制台功能管理有ANSI规范。这在Linux和Mac OS X中是透明的,但是在Windows中它失败了,在Windows中需要使用Win32 API的原语

您可以在下面找到一个非常简单的库,它允许以多平台的方式(Win32&类Unix系统)清除屏幕、显示颜色并在特定坐标中定位光标

它附带了普通的C源文件(.C和.h)、西班牙语的doxygen文档(doc/)和一个简单的演示(main.C)


是的,在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;
}
#包括
#包括
内部主(空)
{   
/*指向我们的控制台*/
HANDLE hConsole=GetStdHandle(标准输出句柄);
int i=0;
/*遍历颜色*/
对于(;i<255;i++)
{/*i代表颜色类型:可以指文本的实际颜色或背景颜色*/
SetConsoleTextAttribute(hConsole,i);
printf(“彩色文本”);
}
getchar();
返回0;
}
祝你好运

Linux/OSX/Unix 在posix系统上,您可以使用

窗户 在windows上有点复杂,有多种解决方案:

Win32 API 在使用和打印到控制台之前,使用Win32 API设置输出颜色。这比简单地在字符串中嵌入ANSI转义序列要麻烦得多,并且需要将窗口作为特例处理

Windows ANSI.SYS及其更换 较旧版本的windows包含ANSI.SYS,但在较新版本中已将其删除。ANSICON是此版本的替代品,您可以在windows命令提示符下安装它以获得ANSI颜色代码支持:

可嵌入的无外部依赖解决方案 这是一个可以轻松集成到任何现有项目中的项目,无需依赖安装的ANSI.SYS或ANSICON


它接受一个包含ANSI转义序列的字符串,并将其转换为相关的Win32等效API函数:

从某种意义上说,Windows API也是一个外部库,只是一个相当大的库。终端转义序列本身就是一个API,只是使用起来非常笨拙;-)您链接到的答案不包括Windows!这些与shell没有任何关系。如果您在标准sh(不是bash,不是csh,不是zsh)上使用Praveen的Link1 poset中的代码[对不起,我在回答中是想编写Unix而不是Linux],您将得到您编写的“控制代码”,而不是您想要的“颜色”。因此,这个问题可以为您提供更多信息。您应该检查不同颜色的颜色代码。还要注意重置为默认值。您只需使用不同的颜色代码格式化输出日志。喂,链接断开了,伙计!这个答案适用于Linux和Mac,但正如op所问,它不适用于Windows。好吧,除非你已经在Windows xp引导上加载了ansi.sys模块(在Windows Vista及以上版本上不起作用)。@Baltasarq,谢谢你的通知!我更新了我的评论,使它也适合Windows操作系统!