【问题标题】:printf right align a bracketed numberprintf 右对齐括号内的数字
【发布时间】:2012-09-03 20:00:51
【问题描述】:

我正在编写一个程序,将所有信息显示在一个数组中。它必须以括号中的数组索引开头(例如[2]),并且它们必须彼此右对齐。

如果只是数字,我知道你可以做到:

printf("%-10d", index);

但是用括号括起来会得到以下输出

[         1]
[         2]
...
[        10]
[        11]

当我真的想要它时:

         [1]
         [2]
...
        [10]
        [11]

我该怎么做?

【问题讨论】:

    标签: c format printf


    【解决方案1】:

    分两步进行:首先在临时缓冲区中构建一个未对齐的字符串,然后打印右对齐的字符串。

    char buf[sizeof(index) * (CHAR_BITS + 2) / 3 + 4];
    sprintf(buf, "[%d]", index);
    printf("%-12s", buf);
    

    【讨论】:

      【解决方案2】:

      一个简单的做法是将其分解为两步过程:

      char tmp[128];
      sprintf(tmp, "[%d]", index);
      printf("%-10s", tmp);
      

      【讨论】:

        【解决方案3】:

        您只需要一行并且没有临时字符缓冲区:

        printf("%*s[%d]\n",12-(int)log10(index),"",index);
        

        【讨论】:

        • 它没有被声明为要求,但这仅在 index > 0 时有效。
        • 是的,过早的优化和过度设计,导致您的代码在 6 个月后无法调试或维护。 ;-)
        猜你喜欢
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-30
        相关资源
        最近更新 更多