怎麼同時用不同的顏色輸出同一內容?

就是達到圖中的效果


這個問題提的好,其實在古老的某個編譯器是有自己的圖形庫的...但是現在那貨沒法用了..

後來我就一直想做一個玩玩,索性今天就做一個玩玩

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太繁瑣,就不寫怎麼把顏色改回來了(其實我不造),留著題主自己實現吧.....

如圖,似乎在窗口和全屏/最大化有一些問題,並不是填充整個console,這個我就解決不了了....

@vczh 應該是怎麼回事呢輪子哥....


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 |