我的问题很简单。我想使用 printf 打印具有指定数量的前导零的整数。但是,前导零的数量是在运行时决定的,而不是先验的。我怎么能那样做?
如果我知道字符数(比如说 5),那就是
printf("%05d", number);
但是不知道会不会是5
您可以使用以下方法传递宽度*
:
printf("%0*d", 5, number);
你也可以使用
cout << setw(width_) << setfill('0') << integerVariable_;
wherewidth_
是在运行时决定的。
我相信星号可用于在大多数平台上实现这一目标。
int width = whatever();
printf("%0*d", width, number );
这里的标准解决方案是printf("%.*d", precision, number)
;在printf
家族中,在 C 中,精度格式字段指定要显示的最小位数,默认为 1。这与宽度无关,因此您可以编写如下内容:
printf("%6.3d", 12); // outputs " 012"
printf("%6.0d", 0); // outputs " ", without any 0
对于宽度或精度(或两者),您可以指定'*'
,这将导致printf
从参数中获取值(传递一个
int
):
printf("%6.*d", 3, 12); // outputs " 012"
printf("%*.3d", 6, 12); // outputs " 012"
printf("%*.*d", 6, 3, 12); // outputs " 012"
遗憾的是,在 中没有等效功能ostream
:输出整数时会忽略精度。(这可能是因为精度没有依赖于类型的默认值。默认值为 6,它适用于所有尊重它的类型。)
使用 C++ setw 和 setfill 中可用的操纵器。