[英]Trailing Zeros in printf/sprintf
我想使數字的輸出總是有6位數
例如:
我怎么能用printf
/ sprintf
做到這一點?
printf及其變體可以向左填充零,而不是向右填充零。 sprintf數字,然后自己添加必要的零,或確保數字長度為6位數:
while(num < 100000)
num *= 10;
(此代碼假設數字不是負數,或者您將遇到麻煩)
printf
將返回打印出的字符數。 這可以打印出剩余的零:
int num = 3; // init
int len = printf("%d", num);
for (int i = 0; i < 6-len; ++i)
printf("0");
您應該添加一些錯誤檢查(例如,如果len
大於6)。
使用sprintf
,您可以在剩余緩沖區上使用memset
,這將更容易。
你無法直接使用printf
(至少以符合標准的方式),你需要事先改變你的數字。
正如Luchian所說, printf
不支持這種行為,這與更常見的反向(左)填充不同。 但是,您可以使用以下內容輕松生成請求的結果:
char *number_to_six_digit_string(char *resulting_array, int number)
{
int current_length = sprintf(resulting_array, "%d", number);
while (6 > current_length) {
resulting_array[current_length++] = '0';
}
resulting_array[current_length] = '\0';
return resulting_array;
}
然后你可以打印結果:
char my_number[7];
printf("my number is %s, other stuff\n", number_to_six_digit_string(my_number, 13));
使用printf
的返回值(如下面for
循環的第一行)
#include <stdio.h>
int main(void) {
int number, width = 6;
for (number = 1; number < 9999999; number *= 7) {
int digits = printf("%d", number);
if (digits < width) printf("%0*d", width-digits, 0);
puts("");
}
return 0;
}
請參閱http://ideone.com/TolIv上運行的代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.