在printf中创建一些文本显示为绿色和红色

ant*_*009 31 c

linux gcc 4.4.1

我有以下fprintf语句,我想将OK视为绿色,将FAILED视为红色.这可能吗?

if(devh == -1)
{
    fprintf(stderr, "Device [ FAILED ]\n");
}
else
{
    fprintf(stderr, "Device [ OK ]\n");
}
Run Code Online (Sandbox Code Playgroud)

非常感谢任何建议,

epa*_*tel 89

我用以下的宏来为终端输出添加颜色.

#define RESET   "\033[0m"
#define BLACK   "\033[30m"      /* Black */
#define RED     "\033[31m"      /* Red */
#define GREEN   "\033[32m"      /* Green */
#define YELLOW  "\033[33m"      /* Yellow */
#define BLUE    "\033[34m"      /* Blue */
#define MAGENTA "\033[35m"      /* Magenta */
#define CYAN    "\033[36m"      /* Cyan */
#define WHITE   "\033[37m"      /* White */
#define BOLDBLACK   "\033[1m\033[30m"      /* Bold Black */
#define BOLDRED     "\033[1m\033[31m"      /* Bold Red */
#define BOLDGREEN   "\033[1m\033[32m"      /* Bold Green */
#define BOLDYELLOW  "\033[1m\033[33m"      /* Bold Yellow */
#define BOLDBLUE    "\033[1m\033[34m"      /* Bold Blue */
#define BOLDMAGENTA "\033[1m\033[35m"      /* Bold Magenta */
#define BOLDCYAN    "\033[1m\033[36m"      /* Bold Cyan */
#define BOLDWHITE   "\033[1m\033[37m"      /* Bold White */
Run Code Online (Sandbox Code Playgroud)

......并使用像

printf( GREEN "Here is some text\n" RESET );
Run Code Online (Sandbox Code Playgroud)

使用示例有色grep?

并以你的例子

if(devh == -1)
{
    fprintf(stderr, "Device [ " RED "FAILED" RESET " ]\n");
}
else
{
    fprintf(stderr, "Device [ " GREEN "OK" RESET " ]\n");
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的回答 (2认同)

el.*_*ado 28

你应该使用一些像ncurses这样的库来处理终端.

或者,在Linux下,您可以使用一些控制台转义序列,例如:

printf ("\033[32;1m OK \033[0m\n");
Run Code Online (Sandbox Code Playgroud)

(在这种情况下,32代表绿色),但既不便携也不优雅.