簡體   English   中英

在printf / sprintf中尾隨零

[英]Trailing Zeros in printf/sprintf

我想使數字的輸出總是有6位數

例如:

  • 如果number為1,則輸出應為100000
  • 如果number為23,則輸出應為230000
  • 如果number為236,則輸出應為236000

我怎么能用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM