C++ C+中的参数化前导零+;printf函数

C++ C+中的参数化前导零+;printf函数,c++,printf,C++,Printf,我的问题很简单。我想使用printf打印具有指定数量前导零的整数。然而,前导零的数量是由运行时决定的,不是先验的。我怎么能这么做 如果我知道字符的数量(比如说5个),那就是 printf("%05d", number); 但是我不知道它是否是5。您可以使用*通过一个宽度: printf("%0*d", 5, number); 你也可以使用 cout << setw(width_) << setfill('0') << integerVariable_;

我的问题很简单。我想使用printf打印具有指定数量前导零的整数。然而,前导零的数量是由运行时决定的,不是先验的。我怎么能这么做

如果我知道字符的数量(比如说5个),那就是

printf("%05d", number);

但是我不知道它是否是5。

您可以使用
*
通过一个宽度:

printf("%0*d", 5, number);
你也可以使用

cout << setw(width_) << setfill('0') << integerVariable_;

cout我相信星号可以在大多数平台上实现这一点

int width = whatever();
printf("%0*d", width, number );

使用C++和SEtW商店的操作器。< /P> < P>标准的解决方案是:代码> PROTF(“%*D”,精度,数字)< /代码>; 在

printf
系列的C中,精度格式字段指定 要显示的最小位数,默认为1。这是 与宽度无关,因此您可以编写以下内容:

printf("%6.3d", 12);    // outputs "   012"
printf("%6.0d",  0);    // outputs "      ", without any 0
对于宽度或精度(或两者),可以指定
“*”
, 这将导致
printf
从参数中提取值(传递
int
):

遗憾的是,
ostream
中没有等效的功能: 输出整数时忽略精度。(这可能是 因为精度没有依赖于类型的默认值
默认值为6,适用于所有与之相关的类型。)

这是C标准(适用于
printf
系列)。遗憾的是,iostream中不支持该选项——整数输出中忽略了精度字段。@Ivan K Rafal已经提供了相同的答案,请不要重复该答案,而是使用注释进行细微更改。@amod0017:为什么?正如您所见,作者仍然没有更新它,并且硬编码了一个值!我更喜欢这个答案的当前形式,因为它确实是参数化的。@Ipapp我想他可能只是建议进行编辑,而不是进行智能复制粘贴。除了在您的示例中,您传递的是宽度,而不是精度。精度之前必须加一个“
”。
,例如,
printf(“%.*d”,5,number)
@JamesKanze是的,我纠正了这个错误。谢谢,那会管用的,但我需要使用printf。无论如何谢谢你!
printf("%6.*d", 3, 12); // outputs "   012"
printf("%*.3d", 6, 12); // outputs "   012"
printf("%*.*d", 6, 3, 12);  // outputs "   012"