C语言中的stdlib和彩色输出
我正在制作一个需要彩色输出的简单应用程序。如何使输出像emacs和bash那样着色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 编辑:我原来的一个使用了提示颜色代码,但不起作用:(这一个是(我测试过的)。处理颜色序列可能会变得混乱,不同的系统可能会使用不同的
我不关心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:Change22
by1
以粗体显示。但我想我可以在终端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;
}