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

问题描述 投票:0回答:2

是否可以使用格式说明符打印多个数字?

printf("%05d",5);

这将打印00005

有没有办法让它打印----例如使用这些格式说明符?

c printf format-specifiers
2个回答
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


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的对数函数的隐式转换,然后返回int以获取printf格式。这个对数只定义为正数(所以在这种情况下整数为1和更大),如果你想要0或负数支持那么它们需要作为特殊情况处理(基本上是3分支if-elseif-else梯形图)。

© www.soinside.com 2019 - 2024. All rights reserved.