【C言語】sprintf関数でゼロ埋めを行う方法「左詰め・右詰め」

sprintf関数は文字列をフォーマットする際、数値をゼロ埋めできるフラグが用意されています。

そのフラグを指定すれば、「123」を「000123」にすることができますし、左詰め・右詰めをすることもできます。

やりかたはとてもカンタンなので、どのようにフラグを指定するのか見ていきましょう。

 
int main()
{
    long a = 12345;;
    sprintf("[%04d]", a);
    sprintf("[%4d]", a);
    sprintf("[%-4d]", a);
}
クリップボードにコピーする


ゼロ埋めする方法

sprintf関数でゼロ埋めするにはフラグとして0とフィールド幅を指定します。

 
#include <stdio.h>
int main()
{
    long a = 5;;
    sprintf("[%04d]", a);
}
クリップボードにコピーする
[0005]

上記サンプルでは、数値の部分が4文字分となるように、ゼロ埋めを行なっています。

ゼロ埋めする必要がない場合(フィールド幅より桁数が大きい場合)は、ゼロ埋めされずにそのまま出力されます。

 
#include <stdio.h>
int main()
{
    long a = 12345;;
    sprintf("[%04d]", a);
}
クリップボードにコピーする
[12345]

わざわざif文やfor文でゼロ埋めする処理を書かなくても、sprintf関数を使えば1行で済むことなので、覚えておくといざという時に便利です。

左詰め・右詰めする方法

おまけですが、ゼロ埋めではなく左詰め(左寄せ)・右詰め(右寄せ)する方法も見ていきましょう。

左詰めしたい場合は0フラグを与えずに、フィールド幅だけを与えます。

 
#include <stdio.h>
int main()
{
    long a = 5;
    printf("[%4d]", a);
}
クリップボードにコピーする
[   5]

 

上記サンプルは6文字分になるように、足りない字数をスペースで補っています。

右詰めしたい場合は、フィールド幅の数値の前にを指定子てください。

 
#include <stdio.h>
int main()
{
    long a = 5;
    sprintf("[%-4d]", a);
}
クリップボードにコピーする
[5   ]

これで右詰めすることができます。

ゼロ埋め・右詰めの組み合わせはできない

ゼロ埋めしながら右詰めするといったことはsprintf関数ではできません。

ですので、数値を10倍するなりして桁数を増やしたものを使うようにしてください。

【ピックアップ】スッキリわかるC言語入門

ピックアップ

対象読者  プログラミング未経験~C言語初心者
どんな人に向いている? C言語の基礎を身につけたい方
おすすめ度 5
備考 ベストセラー1位獲得

C言語で最も挫折しやすいポインタを含む基礎をこれでもかというくらい丁寧に解説されているC言語入門書。

Amazonでベストセラー1位を獲得した実績もあり、C言語初心者全員におすすめできる一冊です。

まだ入門書を持っておらず、ネットの情報だけで独学しているという方は、「スッキリわかるC言語入門」を使えばもっと効率よくC言語が身につくでしょう。

コメント

タイトルとURLをコピーしました