ANSI C中的颜色控制台?

时间:2010-07-18 08:26:19

标签: c console colors

是否可以在简单的ANSI C中为控制台输出着色?没有外部库?这可以在Windows,Linux或Mac OS X中完成吗?

5 个答案:

答案 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)

的Linux / OSX / Unix的

在posix系统上,您可以使用ANSI escape sequences

在Windows上它有点复杂,有多种解决方案:

Win32 API

使用Win32 API在使用SetConsoleTextAttribute friends打印到控制台之前设置输出颜色。这比简单地在字符串中嵌入ANSI转义序列要麻烦得多,并要求您将Windows作为一种特殊情况处理。

Windows ANSI.SYS和替换

旧版本的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)

如果您了解特定于shell的控制代码/转义序列,则可以在Linux中执行此操作。

答案 4 :(得分:0)

ISO C确实对控制台能够显示颜色一无所知,但是基于转义字符控制,控制台功能管理有一个ANSI规范。这在Linux和Mac OS X中透明地工作,但在Windows中失败,您需要使用Win32 API的原语。

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

它带有普通的C源文件(.c和.h),西班牙语的doxygen文档(doc /)和一个简单的demo(main.c)

http://github.com/Baltasarq/cscrutil/