【问题标题】:printf statement in color彩色 printf 语句
【发布时间】:2014-02-14 08:31:19
【问题描述】:

代码

char *pcs = "\e[1;34m%d\e[0m";
int main()
{
    printf(pcs,12313213);
    return 0;
}

输出

蓝色的12313213

我想printf 2 蓝色号码。类似--->

printf(pcs+pcs,12313213,999); //(does not work)

有人可以指导我吗?

【问题讨论】:

    标签: c gcc printf


    【解决方案1】:

    声明 pcs+pcs 增加了两个指针。结果是一个指向完全不相关的地方的指针,这几乎肯定会使你的程序崩溃。 做你想做的事情的正确方法是更改​​格式字符串以接受两个数字:

    char *pcs = "\e[1;34m%d%d\e[0m";
    

    或将格式字符串设为宏并使用两次:

    #define pcs "\e[1;34m%d\e[0m"
    printf(pcs pcs,12313213,999); 
    

    请注意,两个宏实例之间没有逗号。

    【讨论】:

    • 我确实尝试过,但没有工作。现在,当我再次尝试时,它可以工作。 “幽灵密码”
    【解决方案2】:

    pcs 是一个指针...pcs+pcs 是地址的两倍...您可以调用两次printf

    printf(pcs,12313213);
    printf(pcs,999);
    

    您还可以在蒙版中拆分变色图案:

    char *COLOR = "\e[1;34m";
    char *ENDN = "\e[0m";
    int main()
    {
       printf("%s%d%s %s%d%s", COLOR, 12313213, ENDN, COLOR, 999, ENDN);
       return 0;
    }
    

    【讨论】:

    • 我想在一个 printf 语句中做。有可能吗??
    • 一个 colorprintf 函数会很好:cprintf(color, mask, params...)
    【解决方案3】:

    尝试在pcs 的值中再添加一个%d,即char *pcs = "\e[1;34m%d %d\e[0m";

    【讨论】:

      【解决方案4】:

      随便用

      printf("\e[1;34m%d\e[0m \e[1;34m%d\e[0m",12313213,999);
      

      【讨论】: