【问题标题】:Color console in ANSI C?ANSI C 中的颜色控制台?
【发布时间】:2011-03-17 12:46:50
【问题描述】:

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

【问题讨论】:

  • 这个问题可以给你更多信息。您应该检查不同颜色的颜色代码。还要小心重置为默认值。您只需使用不同的颜色代码格式化输出日志。 Link 1Link 2

标签: c console colors


【解决方案1】:

只是普通的 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

【讨论】:

  • 嗯,在某种程度上,Windows API 也是一个外部库,只是一个相当大的库。终端转义序列是它们自己的 API,使用起来非常尴尬;-)
  • 您链接到的答案不包括 Windows!
【解决方案2】:

如果您知道特定于 shell 的控制代码/转义序列,则可以在 Linux 中完成此操作。

【讨论】:

  • 那些和shell没有任何关系。
  • 如果您在标准 sh(不是 bash,不是 csh,不是 zsh)上使用 Praveen 的 Link1 postet 中的代码[对不起,我的意思是在我的回答中写 Unix 而不是 Linux],你会得到什么你写的是“控制代码”,而不是你想要的,“颜色”。
【解决方案3】:

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

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

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

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

【讨论】:

  • 喂,链接已关闭,伙计!
【解决方案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;
}

祝你好运!

【讨论】:

  • 这个答案适用于 Linux 和 Mac,但不适用于 Windows,正如操作所要求的那样。好吧,除非您在 Windows xp 启动时加载了 ansi.sys 模块(在 Windows Vista 及更高版本上不起作用)。
  • @Baltasarq,感谢您的通知!我更新了我的评论,使其也适合 Windows 操作系统!
【解决方案5】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2015-04-25
    • 2013-06-12
    • 2011-09-11
    相关资源
    最近更新 更多