簡體   English   中英

ANSI C中的顏色控制台?

[英]Color console in ANSI C?

是否可以在簡單的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的/ OSX / Unix的

在posix系統上,您可以使用ANSI轉義序列

視窗

在Windows上它有點復雜,有多種解決方案:

Win32 API

使用Win32 API在使用SetConsoleTextAttribute朋友打印到控制台之前設置輸出顏色。 這比簡單地在字符串中嵌入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

在Linux中,如果您了解特定於shell的控制代碼/轉義序列,則可以這樣做。

確實,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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM