C 中的 stdlib 和彩色输出

我正在做一个简单的应用程序,需要彩色输出。如何使输出像 emacs 和 bash 那样着色?

我不关心 Windows,因为我的应用程序只适用于 UNIX 系统。

204006 次浏览

您可以输出特殊的颜色控制代码,以获得彩色终端输出,这里有一个很好的资源对 如何打印颜色

例如:

printf("\033[22;34mHello, world!\033[0m");  // shows a blue hello world

编辑: 我原来的一个使用提示颜色代码,这是不工作的: (这一个(我测试它)。

处理颜色序列可能会变得混乱,不同的系统可能会使用不同的颜色序列指示器。

我建议你试试使用 诅咒。除了颜色,ncurses 还可以用控制台界面做很多其他整洁的事情。

您可以为每个功能分配一种颜色,以使其更加有用。

#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");
}

像明智的,你可以选择不同的颜色代码,使这更通用。

所有现代终端模拟器使用 ANSI 转义码来显示颜色和其他东西。
不要为库操心,代码真的很简单。

更多信息是 给你

例如 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;
}

因为不能使用字符串格式打印字符。您还可以考虑使用类似这样的东西添加格式

#define PRINTC(c,f,s) printf ("\033[%dm" f "\033[0m", 30 + c, s)

f的格式与 printf相同

PRINTC (4, "%s\n", "bar")

将打印 blue bar

PRINTC (1, "%d", 'a')

将打印 red 97

如果整个程序使用相同的颜色,则可以定义 printf()函数。

   #include<stdio.h>
#define ah_red "\e[31m"
#define printf(X) printf(ah_red "%s",X);
#int main()
{
printf("Bangladesh");
printf("\n");
return 0;
}
#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;
}

阅读 维基百科:

  • X1b [0m 重置所有属性
  • X1b [31m 将前景色设置为红色
  • X1b [44m 会将背景设置为蓝色。
  • X1b [31; 44米
  • 两者相反: X1b [31; 44; 7米
  • 记得在 X1b [0m之后重新设置..。