printf/sprintfの末尾のゼロ

私は数字の出力を常に6桁にしたい

例えば。:

  • 数字が1の場合、出力は100000になります。
  • 数字が23の場合、出力は230000になります。
  • 数値が236の場合、出力は236000になります。

どのようにして printf / sprintf でこれを行うことができますか?

3

5 答え

printfとその変形では、右にではなく左にゼロを埋め込むことができます。番号をsprintfし、必要なゼロを自分で追加するか、または番号が6桁であることを確認してください:

while(num < 100000) 
    num *= 10;

(このコードでは、数値が負ではない、または問題が発生すると想定しています)

5
追加された
これは簡単に修正できます: while((num <1000000)and(num> -1000000))ですが、もっと重要なのは32ビット整数以上で、 short >または char は、この種の値を保持できません。
追加された 著者 immortal,

printf will return the number of character printed out. This you can print out the remaining zeros:

int num = 3;//init
int len = printf("%d", num);
for (int i = 0; i < 6-len; ++i)
    printf("0");

エラーチェックを追加する必要があります(たとえば、 len が6より大きい場合など)。

sprintf を使うと、残りのバッファに memset を使うことができます。

2
追加された
ループではなく、 if(len> = 0 && len <6)printf( "000000" + len);
追加された 著者 caf,

printf (少なくとも標準に準拠した方法では)で直接行うことはできません。事前に番号を変更する必要があります。

0
追加された

printf の戻り値を使用します(下の for ループの最初の行のように)

#include 

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;
}

See code running at http://ideone.com/TolIv

0
追加された

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));
0
追加された