Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的stdlib和彩色输出_C_Colors_Stdio_Libc - Fatal编程技术网

C语言中的stdlib和彩色输出

C语言中的stdlib和彩色输出,c,colors,stdio,libc,C,Colors,Stdio,Libc,我正在制作一个需要彩色输出的简单应用程序。如何使输出像emacs和bash那样着色 我不关心Windows,因为我的应用程序只适用于UNIX系统。您可以输出特殊的颜色控制代码以获得彩色终端输出,这里有一个很好的资源 例如: printf("\033[22;34mHello, world!\033[0m"); // shows a blue hello world 编辑:我原来的一个使用了提示颜色代码,但不起作用:(这一个是(我测试过的)。处理颜色序列可能会变得混乱,不同的系统可能会使用不同的

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


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

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

例如:

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

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

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


我建议您尝试使用。除了颜色,ncurses还可以使用控制台UI完成许多其他整洁的事情。

您可以为每个功能指定一种颜色,使其更有用

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

像wise一样,您可以选择不同的颜色代码,使其更通用。

所有现代终端模拟器都使用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;
}
#包括
#定义ANSI_颜色_红色“\x1b[31m”
#定义ANSI_颜色_绿色“\x1b[32m”
#定义ANSI_颜色_黄色“\x1b[33m”
#定义ANSI_颜色_蓝色“\x1b[34m”
#定义ANSI_颜色_品红“\x1b[35m”
#定义ANSI_颜色_青色“\x1b[36m”
#定义ANSI_颜色_重置“\x1b[0m”
int main(int argc,char const*argv[]{
printf(ANSI_COLOR_RED“此文本为红色!”ANSI_COLOR_RESET“\n”);
printf(ANSI_COLOR_GREEN“此文本为绿色!”ANSI_COLOR_RESET“\n”);
printf(ANSI_COLOR_YELLOW“此文本为黄色!”ANSI_COLOR_RESET“\n”);
printf(ANSI_COLOR_BLUE“此文本为蓝色!”ANSI_COLOR_RESET“\n”);
printf(ANSI_COLOR_洋红“此文本为洋红!”ANSI_COLOR_RESET“\n”);
printf(ANSI_COLOR_CYAN“此文本为青色!”ANSI_COLOR_RESET“\n”);
返回0;
}

因为您不能使用字符串格式打印字符。您也可以考虑使用以下内容添加一种格式

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

PRINTC (4, "%s\n", "bar")
将打印蓝色条

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

将打印
red97

如果整个程序使用相同的颜色,则可以定义
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;
   }
#包括
#定义红色“\e[31m”
#定义printf(X)printf(红色“%s”,X);
#int main()
{
printf(“孟加拉国”);
printf(“\n”);
返回0;
}
#包括
#定义蓝色(字符串)“\x1b[34m”字符串“\x1b[0m”
#定义红色(字符串)“\x1b[31m”字符串“\x1b[0m”
内部主(空)
{
printf(“这是”红色(“红色”)!\n”);
//有点复杂。。。
printf(“这是“蓝色”(%s”)!\n、“蓝色”);
返回0;
}
阅读:

  • \x1b[0m重置所有属性
  • \x1b[31m将前景色设置为红色
  • \x1b[44m将背景设置为蓝色
  • 两者:\x1b[31;44m
  • 两者都有,但反向:\x1b[31;44;7m
  • 记得在之后重置\x1b[0m

edition.c:在函数“int main(int,const char**)”中:edition.c:4:错误:未知转义序列“\]”edition.c:4:错误:未知转义序列“\]”edition.c~
只不过是一堆编译错误:(另外,我的应用程序不应该依赖于BASH。@科宁:这不是依赖于BASH的,它也适用于其他shell(但我肯定不是全部)。我用ksh和csh进行了验证。注意,我编辑了控制代码以使其正常工作。它不会正常工作。这取决于终端模拟。如果是ANSI理解ANSI转义序列,那么您将使用颜色、粗体或其他任何形式。@Stephen Bonus:Change
22
by
1
以粗体显示。但我想我可以在终端emul中运行bash不支持ANSI escape seqs.Nice标志的名称:)只是一个问题被标记为“c”,而不是“c++”@ShinTakezou:是的..在这种情况下,所有的ANSI转义码都将被忽略,你将没有选择来进行奇特的输出。ANSI转义序列不是由shell解释的,而是由终端仿真器解释的。尤其喜欢“不要为库而烦恼”这句话!ANSI代码甚至可以在Windows命令提示符下工作。使用不同的颜色序列是我找不到“colors.h”文件的原因吗?
#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;
}