読み込み中...

C言語で桁数を指定する5つの方法

C言語で桁数を指定する方法を学ぶ初心者向けの教育図 C言語
この記事は約7分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

C言語を使ってプログラミングを始めると、最初はたくさんの問題に直面するかもしれません。

この記事を読むと、C言語で桁数を指定する方法を完全に理解し、あなたのコーディング力を大幅に向上させることができます。

●C言語とは

C言語は、1969年に米国のAT&Tベル研究所で開発された汎用プログラミング言語です。

その後、その性能と使いやすさから広く受け入れられ、今日では様々なソフトウェアの開発に利用されています。

○C言語の特性

C言語は低レベルプログラミングと高レベルプログラミングの特性を両方持っているため、非常に汎用性が高いです。

さらに、C言語はポータビリティが高く、さまざまなハードウェアとオペレーティングシステムで使用できます。

●C言語での桁数指定の基本

C言語で桁数を指定するための基本的な技術は2つあります。

一つ目は「printf関数」を使う方法で、二つ目は「scanf関数」を使う方法です。

○printf関数による桁数指定

printf関数は、標準出力(通常は画面)に文字列を出力するための関数です。

桁数を指定することで、出力する文字列の長さをコントロールすることができます。

○scanf関数による桁数指定

一方、scanf関数は、標準入力(通常はキーボード)から値を読み込むための関数です。

桁数を指定することで、読み込む値の大きさを制御することができます。

この2つの基本的な技術を理解し、使いこなすことで、より洗練されたプログラムを作成することが可能になります。

次に、これらの関数を使った具体的なサンプルコードとその説明を紹介します。

●C言語での桁数指定の詳細な使い方

C言語では、printf関数とscanf関数を用いて出力や入力の桁数を指定することができます。

○サンプルコード1:printf関数での桁数指定

#include <stdio.h>

int main(void) {
    int num = 123;
    printf("%5d\n", num);
    return 0;
}

このコードでは、printf関数を使って整数の桁数を指定する例を示しています。

この例では、整数numを5桁で出力しています。出力する数値が5桁に満たない場合、空白で埋められます。

実行結果:

  123

このように、出力する数値が5桁に満たない場合、左側が空白で埋められることが確認できます。

○サンプルコード2:scanf関数での桁数指定

#include <stdio.h>

int main(void) {
    char str[6];
    scanf("%5s", str);
    printf("%s\n", str);
    return 0;
}

このコードでは、scanf関数を使って文字列の長さを指定する例を表しています。

この例では、5文字分の文字列を入力し、それを出力しています。

たとえば、実行時に “HelloWorld” と入力した場合の実行結果は次の通りになります。

Hello

このように、入力は5文字までしか読み込まれず、それを出力することができます。

●桁数指定の注意点と対処法

桁数を指定する際の注意点として、指定した桁数がバッファのサイズを超えると、バッファオーバーフローという問題が発生します。

これは、予期せぬ動作やセキュリティ上の問題を引き起こす可能性があります。

この問題を回避するためには、指定する桁数がバッファのサイズを超えないようにすることが必要です。

具体的には、バッファのサイズと同じか、それ以下の桁数を指定します。

たとえば、次のコードでは、バッファのサイズを5とし、scanf関数で読み込む文字数を4に指定しています。

これにより、バッファオーバーフローを防ぐことができます。

#include <stdio.h>

int main(void) {
    char str[5];
    scanf("%4s", str);
    printf("%s\n", str);
    return 0;
}

この例では、scanf関数で読み込む文字数をバッファのサイズ-1(終端文字の’\0’のため)に指定しています。

この方法で、入力する文字数がバッファのサイズを超えることを防ぐことができます。

たとえば、実行時に “HelloWorld” と入力した場合の実行結果は次の通りになります。

Hell

このように、入力は4文字までしか読み込まれず、それを出力することができます。

これにより、バッファオーバーフローを防ぐことができます。

●桁数指定のカスタマイズ方法

桁数指定の仕方を一通り見てきましたが、それだけでは終わりません。

実はこれを使って更に色々な表現をすることが可能なのです。

では、具体的にどのようにカスタマイズを行うのでしょうか。

C言語では、printf関数とscanf関数の中で桁数を指定する場合、書式指定子に対してパラメータを指定することで、出力・入力の桁数を制御することができます。

下記の例では、これらの使用方法を見てみましょう。

○サンプルコード3:printf関数でのカスタム桁数指定

#include<stdio.h>

int main(){
    int value = 12345;
    printf("表示形式1:%8d\n", value); // 右詰め8桁で表示
    printf("表示形式2:%-8d\n", value); // 左詰め8桁で表示
    return 0;
}

このコードでは、printf関数を使って8桁の桁数を指定し、値を表示する例を表しています。

その結果、出力される値は右詰めあるいは左詰めで8桁になります。

このように、桁数を指定する際には、直後の数字が表示する桁数を指定し、その前に-をつけることで左詰めを指定できます。

実行結果は次の通りです。

表示形式1:   12345
表示形式2:12345   

この実行結果を見ると、表示形式1の出力では12345が右詰めで表示され、表示形式2の出力では12345が左詰めで表示されていることがわかります。

○サンプルコード4:scanf関数でのカスタム桁数指定

#include<stdio.h>

int main(){
    int value;
    printf("5桁以内の数字を入力してください:");
    scanf("%5d", &value); // 入力を5桁以内に制限
    printf("入力された数字は%dです\n", value);
    return 0;
}

このコードでは、scanf関数を使って5桁の桁数を指定し、ユーザーからの入力を制限する例を示しています。

この結果、ユーザーが入力できる値は最大で5桁になります。

実行結果は次の通りです。

5桁以内の数字を入力してください:123456
入力された数字は12345です

この実行結果を見ると、ユーザーが6桁の数字123456を入力しましたが、scanf関数での桁数制限により、最初の5桁の12345だけがvalue変数に保存され、6桁目の6は無視されています。

●桁数指定の応用例

これまで学んだ知識を使って、実際に問題を解決してみましょう。

ここでは、金額を表示する際に桁数を指定して、視認性を向上させる例を見てみましょう。

○サンプルコード5:実世界の問題を解決するための桁数指定

#include<stdio.h>

int main(){
    int price = 12345;
    printf("商品の価格:%8d円\n", price); // 右詰め8桁で表示
    return 0;
}

このコードでは、商品の価格を表示する際に桁数を指定しています。

これにより、価格が一定の桁数に揃って表示され、視認性が向上します。

実行結果は次の通りです。

商品の価格:   12345円

この実行結果を見ると、商品の価格が右詰めで8桁に揃えて表示されており、価格の視認性が向上しています。

まとめ

以上が、C言語での桁数指定の詳細な使い方になります。

printf関数やscanf関数を使う際には、桁数指定を活用することで、出力や入力の表示を制御し、より見やすい形式でデータを扱うことができます。

この記事を通じて、C言語で桁数を指定する方法について理解が深まったことを願っています。

これらの知識を活用して、日々のコーディングに役立ててください。