Câu trả lời:
Tất cả các trình giả lập thiết bị đầu cuối hiện đại sử dụng mã thoát ANSI để hiển thị màu sắc và những thứ khác.
Đừng bận tâm với các thư viện, mã thực sự đơn giản.
Thêm thông tin ở đây .
Ví dụ trong C:
#include <stdio.h>
#define ANSI_COLOR_RED "\x1b[31m"
#define ANSI_COLOR_GREEN "\x1b[32m"
#define ANSI_COLOR_YELLOW "\x1b[33m"
#define ANSI_COLOR_BLUE "\x1b[34m"
#define ANSI_COLOR_MAGENTA "\x1b[35m"
#define ANSI_COLOR_CYAN "\x1b[36m"
#define ANSI_COLOR_RESET "\x1b[0m"
int main (int argc, char const *argv[]) {
printf(ANSI_COLOR_RED "This text is RED!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_GREEN "This text is GREEN!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_YELLOW "This text is YELLOW!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_BLUE "This text is BLUE!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_MAGENTA "This text is MAGENTA!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_CYAN "This text is CYAN!" ANSI_COLOR_RESET "\n");
return 0;
}
Xử lý các chuỗi màu có thể trở nên lộn xộn và các hệ thống khác nhau có thể sử dụng các Chỉ báo trình tự màu khác nhau.
Tôi sẽ đề nghị bạn thử sử dụng ncurses . Khác với màu sắc, ncurses có thể làm nhiều thứ gọn gàng khác với giao diện điều khiển.
Bạn có thể xuất mã kiểm soát màu đặc biệt để có đầu ra màu, đây là một tài nguyên tốt về cách in màu .
Ví dụ:
printf("\033[22;34mHello, world!\033[0m"); // shows a blue hello world
EDIT: Bản gốc của tôi đã sử dụng mã màu nhanh chóng, không hoạt động :( Cái này không (tôi đã kiểm tra nó).
edition.c: In function ‘int main(int, const char**)’: edition.c:4: error: unknown escape sequence '\]' edition.c:4: error: unknown escape sequence '\]' edition.c edition.c~
Không có gì hơn một loạt các lỗi biên dịch :(
22
bằng cách 1
để nhìn thấy nó trong đậm .
Bạn có thể chỉ định một màu cho mọi chức năng để làm cho nó hữu ích hơn.
#define Color_Red "\33[0:31m\\]" // Color Start
#define Color_end "\33[0m\\]" // To flush out prev settings
#define LOG_RED(X) printf("%s %s %s",Color_Red,X,Color_end)
foo()
{
LOG_RED("This is in Red Color");
}
Giống như khôn ngoan, bạn có thể chọn các mã màu khác nhau và làm cho nó chung chung hơn.
Bởi vì bạn không thể in một ký tự với chuỗi định dạng. Bạn cũng có thể nghĩ đến việc thêm một định dạng với cái gì đó như thế này
#define PRINTC(c,f,s) printf ("\033[%dm" f "\033[0m", 30 + c, s)
f
là định dạng như trong printf
PRINTC (4, "%s\n", "bar")
sẽ in blue bar
PRINTC (1, "%d", 'a')
sẽ in red 97
#include <stdio.h>
#define BLUE(string) "\x1b[34m" string "\x1b[0m"
#define RED(string) "\x1b[31m" string "\x1b[0m"
int main(void)
{
printf("this is " RED("red") "!\n");
// a somewhat more complex ...
printf("this is " BLUE("%s") "!\n","blue");
return 0;
}
đọc Wikipedia :