【问题标题】:Making some text in printf appear in green and red使 printf 中的一些文本显示为绿色和红色
【发布时间】:2009-12-25 14:02:23
【问题描述】:

linux gcc 4.4.1

我有以下 fprintf 语句,我希望 OK 为绿色,FAILED 为红色。这可能吗?

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

非常感谢您的任何建议,

【问题讨论】:

    标签: c


    【解决方案1】:

    我使用以下宏来为终端输出添加颜色。

    #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 */
    

    ...并使用类似

    printf( GREEN "Here is some text\n" RESET );
    

    使用示例Colored grep?

    你的例子

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

    【讨论】:

    • 感谢您的精彩回答
    【解决方案2】:

    您可能应该使用诸如 ncurses 之类的库来处理终端。

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

    printf ("\033[32;1m OK \033[0m\n");
    

    (在本例中,32 代表绿色),但它既不便携也不优雅。

    【讨论】:

    • 使用库肯定更好——硬接线终端转义序列很糟糕,与之相关的问题是发明 curses 库的原因(或者是很大一部分原因)。跨度>
    猜你喜欢
    • 2020-10-08
    • 2011-03-09
    • 2020-11-02
    • 1970-01-01
    • 2016-04-17
    • 2014-08-26
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多