簡體   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