【C言語】scanf関数の使い方についてわかりやすく詳しく解説

目次から探す

scanf関数の注意点とトラブルシューティング

scanf関数は便利な入力関数ですが、使い方によっては注意が必要な場合があります。

また、予期しないエラーが発生することもあります。

ここでは、scanf関数の注意点とトラブルシューティングについて解説します。

入力バッファのクリア

scanf関数を使って入力を受け取る際、入力バッファに残っている改行文字や空白文字などが次の入力に影響を与えることがあります。

これを防ぐために、scanf関数の前に fflush(stdin) を呼び出すことがあります。


#include <stdio.h>
int main() {
    int num;
    char ch;
    printf("整数を入力してください:");
    fflush(stdin); // 入力バッファのクリア
    scanf("%d", &num);
    printf("文字を入力してください:");
    fflush(stdin); // 入力バッファのクリア
    scanf("%c", &ch);
    printf("入力された整数:%d\n", num);
    printf("入力された文字:%c\n", ch);
    return 0;
}

上記の例では、 fflush(stdin) を使って入力バッファをクリアしています。

これにより、前の入力が次の入力に影響を与えることがなくなります。

入力エラーの処理

scanf関数は、入力の形式が期待通りでない場合にエラーを返します。

このエラーを適切に処理することが重要です。


#include <stdio.h>
int main() {
    int num;
    printf("整数を入力してください:");
    if (scanf("%d", &num) != 1) {
        printf("入力エラーが発生しました。\n");
        return 1;
    }
    printf("入力された整数:%d\n", num);
    return 0;
}

上記の例では、scanf関数の戻り値をチェックしています。

戻り値が1でない場合、つまり入力エラーが発生した場合にエラーメッセージを表示しています。

文字列の入力時の注意点

scanf関数を使って文字列を入力する場合、文字列の長さに制限がないため、バッファオーバーフローの危険性があります。

これを防ぐためには、文字列の入力時には%sではなく%Nsという形式を使うことが推奨されています。

ただし、Nはバッファのサイズを表す数字です。


#include <stdio.h>
int main() {
    char name[20];
    printf("名前を入力してください(最大19文字):");
    scanf("%19s", name);
    printf("入力された名前:%s\n", name);
    return 0;
}

上記の例では、%19sというフォーマット指定子を使って、最大19文字までの文字列を入力するようにしています。

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

以上がscanf関数の注意点とトラブルシューティングの解説です。

これらのポイントを押さえて、正しくscanf関数を使いましょう。

1 2
目次から探す