4

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

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

printf("%05d", number);

但是不知道会不会是5

4

5 回答 5

10

您可以使用以下方法传递宽度*

printf("%0*d", 5, number);
于 2012-05-08T10:44:21.730 回答
5

你也可以使用

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

wherewidth_是在运行时决定的。

于 2012-05-08T10:47:01.993 回答
2

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

int width = whatever();
printf("%0*d", width, number );
于 2012-05-08T10:48:05.143 回答
2

这里的标准解决方案是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,它适用于所有尊重它的类型。)

于 2012-05-08T11:06:56.650 回答
-1

使用 C++ setw 和 setfill 中可用的操纵器。

于 2012-05-08T11:00:30.817 回答