怎麼同時用不同的顏色輸出同一內容?
就是達到圖中的效果
這個問題提的好,其實在古老的某個編譯器是有自己的圖形庫的...但是現在那貨沒法用了..
後來我就一直想做一個玩玩,索性今天就做一個玩玩
Windows下用Windows API.SetConsoleTextAttribute function (Windows)後來隨手發現了一個不錯的實現,但是不方便,索性我就重寫了一個printf_c函數.下面是color.h文件
#ifndef _stdio_h
#include &
#endif // !_stdio_h
#ifndef _windows_h
#include "windows.h"
#endif // !_windows_h
void set_console_color(unsigned short color_index)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color_index);
}
_Check_return_opt_
_CRT_STDIO_INLINE int __CRTDECL printf_c(
unsigned short color,
_In_z_ _Printf_format_string_ char const* const _Format, ...)
#if defined _NO_CRT_STDIO_INLINE
;
#else
{
set_console_color(color);
int _Resu< va_list _ArgList; __crt_va_start(_ArgList, _Format); _Result = _vfprintf_l(stdout, _Format, NULL, _ArgList); __crt_va_end(_ArgList); return _Resu< } #endif
下面是color.c文件
#include "stdio.h"
#include "windows.h"
#include "color.h"
int main()
{
set_console_color(9);
printf("%s
", "world");
printf_c(6,"%s","hello");
// color from HEX 00 to FF
for (unsigned short i = 0;i &< 256;i++)
{
printf_c(i,"%02X %s
", i,"66666 hello");
}
system("pause");
return 0;
} // main
下面是圖片,其實就是改前景色和背景色,不過Windows API太繁瑣,就不寫怎麼把顏色改回來了(其實我不造),留著題主自己實現吧.....Mac 和 Linux 下的終端可以用轉義序列來控制顏色。達到上面效果,Mac 下的代碼是:
#include &
#define COLOR_RED 1
#define COLOR_GREEN 2
#define COLOR_YELLOW 3
#define COLOR_BLUE 4
#define COLOR_MAGENTA 5
#define COLOR_CYAN 6
static void printColorText(int color, const char* text)
{
printf("e[0;%dm%se[0m", color + 30, text);
}
int main(int argc, char** argv)
{
int colors[] = {
COLOR_BLUE,
COLOR_GREEN,
COLOR_CYAN,
COLOR_RED,
COLOR_MAGENTA,
COLOR_YELLOW
};
for (int i = 0; i &< sizeof(colors) / sizeof(colors[0]); i++)
{
printColorText(colors[i], "hello, world!
");
}
return 0;
}
Windows 下我沒有測試過。就算轉義序列不可以用,也應該可以用另外的API來控制。注意,上面的代碼在Xcode中調試狀態下是無效的,需要編譯出來後用終端運行。
轉義序列控制顏色的內容,可以參考文章:通過printf設置Linux終端輸出的顏色和顯示方式。推薦閱讀:
※實踐中,你用過哪些由簡單命令組裝起來的複雜命令行?
※Windows 和 Unix 下的命令操作有什麼迷人之處?
※PowerShell 與 Bash 相比,哪個更好?
※如何善加利用 Mac 下的 Terminal ?
※DOS的常用命令都有哪些?如何應用?
TAG:命令行界面CLI |