C++ C+中的参数化前导零+;printf函数
我的问题很简单。我想使用printf打印具有指定数量前导零的整数。然而,前导零的数量是由运行时决定的,不是先验的。我怎么能这么做 如果我知道字符的数量(比如说5个),那就是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("%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"