例如可以使用格式说明符打印多个数字吗?
printf("%05d",5);
这将打印00005
是否有办法使用这些格式说明符来打印----- 5?
答案 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为底的数字,这涉及对数函数从int
到double
的隐式转换,然后{ {1}}格式。该对数仅针对正数(因此,在这种情况下为1或更大的整数)定义,如果要支持0或负数,则需要将它们作为特殊情况处理(基本上是3个分支if-elseif-else阶梯)。>