[英]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;
}
祝好運!
在posix系統上,您可以使用ANSI轉義序列 。
在Windows上它有點復雜,有多種解決方案:
使用Win32 API在使用SetConsoleTextAttribute和朋友打印到控制台之前設置輸出顏色。 這比簡單地在字符串中嵌入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
在Linux中,如果您了解特定於shell的控制代碼/轉義序列,則可以這樣做。
確實,ISO C對控制台能夠顯示顏色一無所知,但是基於轉義字符控制的控制台功能管理有ANSI規范。 這在Linux和Mac OS X中透明地工作,但是在Windows中失敗,您需要使用Win32 API的原語。
您可以在下面找到一個非常簡單的庫,它允許以多平台方式(Win32和類Unix系統)清除屏幕,顯示顏色並將光標定位在特定坐標中。
它帶有普通的C源文件(.c和.h),西班牙語的doxygen文檔(doc /)和一個簡單的demo(main.c)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.