通过使用格式说明符来打印数字或字符的多个实例

时间:2019-04-19 08:55:30

标签: c printf format-specifiers

例如可以使用格式说明符打印多个数字吗?

printf("%05d",5);

这将打印00005

是否有办法使用这些格式说明符来打印----- 5?

2 个答案:

答案 0 :(得分:1)

如果可以使用alloca,那么一个不太好的解决方案是:

printf("%s%d", (char*)memset(memset(alloca(4), '\0', 4), '-', 3),5);

如果可以允许使用c ++,则可以尝试一下,看起来更优雅:

printf("%s%d",std::string(3,'-').c_str(),5); 

这两种情况都会给出---5

答案 1 :(得分:0)

您不能完全按照自己的意愿做。我认为最接近的是这样的:

#include <stdio.h>
#include <math.h>

// FILLER_DASH needs to be long enough for all use cases
const char *FILLER_DASH = "---------------------------------------------------";

int main(void) {

    const int field_width = 10;

    for (int number = 1 ; number < 1100000; number += (number + 90)) {
        // zero or negative numbers not supported by this simple formula
        int digits = log10(number) + 1;
        printf("%.*s%d\n", field_width - digits, FILLER_DASH, number);
    }
    return 0;
}

它使用格式说明符*来获取参数的字段宽度,然后使用字符串来提供要打印的字符。

它使用以10为底的对数来获取数字中以10为底的数字,这涉及对数函数从intdouble的隐式转换,然后{ {1}}格式。该对数仅针对正数(因此,在这种情况下为1或更大的整数)定义,如果要支持0或负数,则需要将它们作为特殊情况处理(基本上是3个分支if-elseif-else阶梯)。