繁体   English   中英

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

[英]Parameterized Leading Zeros in C++ printf function

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

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

printf("%05d", number);

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

您可以使用*传递宽度:

printf("%0*d", 5, number);

你也可以使用

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

其中width_在运行时决定。

我相信星号可用于在大多数平台上实现这一点。

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中提供的操纵器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM