【C言語】scanfで値を入力しても0になる原因と対処法

この記事では、C言語のscanf関数を使って値を入力する際に、なぜ入力した値が0になってしまうのか、その原因と対処法について解説します。

目次から探す

scanfで値を入力しても0になる原因

scanf関数は、ユーザーからの入力を受け取るためによく使用されるC言語の関数です。

しかし、時にはscanfで値を入力しても0になることがあります。

この記事では、その原因と対処法について解説します。

入力バッファの問題

scanf関数は、入力バッファからデータを読み取ります。

しかし、バッファには改行文字や空白文字などが残っている場合、それらが読み取られてしまい、意図した値を正しく取得できないことがあります。

以下は、入力バッファの問題が起きる例です。

#include <stdio.h>
int main() {
    int num;
    printf("整数を入力してください: ");
    scanf("%d", &num);
    printf("入力された値は %d です。\n", num);
    return 0;
}

このプログラムでは、ユーザーに整数の入力を求めています。

しかし、実際に実行してみると、何も入力せずにEnterキーを押すと、入力された値が0になってしまいます。

この問題を解決するためには、scanf関数の前に入力バッファをクリアするための処理を追加する必要があります。

#include <stdio.h>
int main() {
    int num;
    printf("整数を入力してください: ");
    // 入力バッファをクリアする
    while (getchar() != '\n');
    scanf("%d", &num);
    printf("入力された値は %d です。\n", num);
    return 0;
}

このように、getchar関数を使って改行文字まで入力バッファを読み捨てることで、意図した値を正しく取得することができます。

データ型の不一致

もう一つの原因は、scanf関数のフォーマット指定子と変数のデータ型が一致していない場合です。

scanf関数は、指定されたフォーマットに従ってデータを読み取りますが、フォーマット指定子と変数のデータ型が一致しないと、正しくデータを取得できません。

以下は、データ型の不一致が起きる例です。

#include <stdio.h>
int main() {
    float num;
    printf("実数を入力してください: ");
    scanf("%d", &num);
    printf("入力された値は %f です。\n", num);
    return 0;
}

このプログラムでは、ユーザーに実数の入力を求めていますが、scanf関数のフォーマット指定子が%d(整数)となっているため、実数を正しく取得できません。

結果として、入力された値は0になってしまいます。

この問題を解決するためには、scanf関数のフォーマット指定子と変数のデータ型を一致させる必要があります。

#include <stdio.h>
int main() {
    float num;
    printf("実数を入力してください: ");
    scanf("%f", &num);
    printf("入力された値は %f です。\n", num);
    return 0;
}

このように、フォーマット指定子を%f(実数)に修正することで、正しく実数を取得することができます。

以上が、scanfで値を入力しても0になる原因と対処法についての解説です。

入力バッファの問題やデータ型の不一致に注意しながら、scanf関数を使って正しく値を入力することができるようにしましょう。

目次から探す