我的问题很简单。我想使用printf打印具有指定数量的前导零的整数。但是,前导零的数量是由运行时决定的,而不是先验的。我怎么能这样做?
如果我知道字符的数量(比方说5),那就是
printf("%05d", number);
但我不知道它是不是5。
答案 0 :(得分:9)
您可以使用*
传递宽度:
printf("%0*d", 5, number);
答案 1 :(得分:4)
您也可以使用
cout << setw(width_) << setfill('0') << integerVariable_;
其中width_
在运行时决定。
答案 2 :(得分:2)
我相信星号可用于在大多数平台上实现这一目标。
int width = whatever();
printf("%0*d", width, number );
答案 3 :(得分:1)
此处的标准解决方案是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,它适用于所有尊重它的类型。)
答案 4 :(得分:-1)
使用C ++ setw和setfill中提供的操纵器。