標準入出力

[C言語] scanfで2つの数値を入力して計算するプログラムの書き方

C言語でユーザーから2つの数値を入力し、それらを計算するプログラムを作成するには、標準入力関数であるscanfを使用します。

まず、int型の変数を宣言し、scanfを用いてユーザーからの入力を受け取ります。

入力された数値は、printfを使って計算結果と共に出力することができます。

この方法を用いることで、簡単にユーザーインタラクションを含むプログラムを作成できます。

2つの数値を入力する方法

C言語で2つの数値を入力する方法は、さまざまな形式で実現できます。

ここでは、複数の変数を使った入力、スペース区切りでの入力、改行区切りでの入力について解説します。

複数の変数を使った入力

複数の変数を使って数値を入力する方法は、scanf関数を用いてそれぞれの変数に値を格納する方法です。

以下にサンプルコードを示します。

#include <stdio.h>
int main() {
    int num1, num2;
    // ユーザーに2つの数値の入力を促す
    printf("2つの整数を入力してください: ");
    // scanfで2つの整数を入力
    scanf("%d %d", &num1, &num2);
    // 入力された数値を表示
    printf("入力された数値は %d と %d です。\n", num1, num2);
    return 0;
}
2つの整数を入力してください: 5 10
入力された数値は 5 と 10 です。

この方法では、ユーザーが入力した数値がそれぞれnum1num2に格納されます。

スペース区切りでの入力

スペース区切りでの入力は、ユーザーがスペースを使って数値を区切る方法です。

scanf関数はデフォルトでスペースを区切り文字として認識します。

#include <stdio.h>
int main() {
    int num1, num2;
    // ユーザーにスペース区切りで数値を入力するよう促す
    printf("スペースで区切って2つの整数を入力してください: ");
    // scanfでスペース区切りの整数を入力
    scanf("%d %d", &num1, &num2);
    // 入力された数値を表示
    printf("入力された数値は %d と %d です。\n", num1, num2);
    return 0;
}
スペースで区切って2つの整数を入力してください: 3 7
入力された数値は 3 と 7 です。

この方法では、ユーザーがスペースを使って数値を入力することで、scanfが自動的にそれを認識し、変数に格納します。

改行区切りでの入力

改行区切りでの入力は、ユーザーが数値を入力した後にEnterキーを押すことで次の数値を入力する方法です。

#include <stdio.h>
int main() {
    int num1, num2;
    // ユーザーに改行区切りで数値を入力するよう促す
    printf("1つ目の整数を入力してください: ");
    // 1つ目の整数を入力
    scanf("%d", &num1);
    printf("2つ目の整数を入力してください: ");
    // 2つ目の整数を入力
    scanf("%d", &num2);
    // 入力された数値を表示
    printf("入力された数値は %d と %d です。\n", num1, num2);
    return 0;
}
1つ目の整数を入力してください: 8
2つ目の整数を入力してください: 12
入力された数値は 8 と 12 です。

この方法では、ユーザーが1つ目の数値を入力してEnterキーを押し、次に2つ目の数値を入力することで、それぞれの変数に値が格納されます。

入力された数値の計算

C言語で入力された数値を使って基本的な計算を行う方法について解説します。

ここでは、足し算、引き算、掛け算、割り算の実装方法をそれぞれ紹介します。

足し算の実装

足し算は、2つの数値を加算する基本的な演算です。

以下に、入力された2つの数値を足し算するサンプルコードを示します。

#include <stdio.h>
int main() {
    int num1, num2, sum;
    // 2つの整数を入力
    printf("2つの整数を入力してください: ");
    scanf("%d %d", &num1, &num2);
    // 足し算を実行
    sum = num1 + num2;
    // 結果を表示
    printf("足し算の結果は %d です。\n", sum);
    return 0;
}
2つの整数を入力してください: 4 6
足し算の結果は 10 です。

このプログラムでは、num1num2を加算し、その結果をsumに格納して表示します。

引き算の実装

引き算は、2つの数値の差を求める演算です。

以下に、入力された2つの数値を引き算するサンプルコードを示します。

#include <stdio.h>
int main() {
    int num1, num2, difference;
    // 2つの整数を入力
    printf("2つの整数を入力してください: ");
    scanf("%d %d", &num1, &num2);
    // 引き算を実行
    difference = num1 - num2;
    // 結果を表示
    printf("引き算の結果は %d です。\n", difference);
    return 0;
}
2つの整数を入力してください: 9 3
引き算の結果は 6 です。

このプログラムでは、num1からnum2を引き、その結果をdifferenceに格納して表示します。

掛け算の実装

掛け算は、2つの数値を乗算する演算です。

以下に、入力された2つの数値を掛け算するサンプルコードを示します。

#include <stdio.h>
int main() {
    int num1, num2, product;
    // 2つの整数を入力
    printf("2つの整数を入力してください: ");
    scanf("%d %d", &num1, &num2);
    // 掛け算を実行
    product = num1 * num2;
    // 結果を表示
    printf("掛け算の結果は %d です。\n", product);
    return 0;
}
2つの整数を入力してください: 7 5
掛け算の結果は 35 です。

このプログラムでは、num1num2を乗算し、その結果をproductに格納して表示します。

割り算の実装

割り算は、2つの数値を除算する演算です。

以下に、入力された2つの数値を割り算するサンプルコードを示します。

#include <stdio.h>
int main() {
    int num1, num2;
    float quotient;
    // 2つの整数を入力
    printf("2つの整数を入力してください: ");
    scanf("%d %d", &num1, &num2);
    // 割り算を実行
    if (num2 != 0) {
        quotient = (float)num1 / num2;
        // 結果を表示
        printf("割り算の結果は %.2f です。\n", quotient);
    } else {
        // 0で割ることはできないためエラーメッセージを表示
        printf("エラー: 0で割ることはできません。\n");
    }
    return 0;
}
2つの整数を入力してください: 10 2
割り算の結果は 5.00 です。

このプログラムでは、num1num2で除算し、その結果をquotientに格納して表示します。

割り算では、0で割ることができないため、条件分岐を用いてエラーチェックを行っています。

エラーハンドリング

C言語でプログラムを作成する際には、ユーザーからの入力エラーや無効な入力に対処するためのエラーハンドリングが重要です。

ここでは、入力エラーの検出、無効な入力への対処法、ループを使った再入力の促しについて解説します。

入力エラーの検出

入力エラーの検出は、ユーザーが期待される形式でデータを入力しなかった場合に、それを検出するための方法です。

scanf関数の戻り値を利用して、入力が正しく行われたかどうかを確認できます。

#include <stdio.h>
int main() {
    int num1, num2;
    // 2つの整数を入力
    printf("2つの整数を入力してください: ");
    // 入力エラーの検出
    if (scanf("%d %d", &num1, &num2) != 2) {
        printf("入力エラー: 整数を2つ入力してください。\n");
        return 1; // エラーコードを返す
    }
    // 入力が正しい場合の処理
    printf("入力された数値は %d と %d です。\n", num1, num2);
    return 0;
}

このプログラムでは、scanfの戻り値が2でない場合、入力エラーとして処理し、エラーメッセージを表示します。

無効な入力への対処法

無効な入力への対処法として、入力が期待される形式でない場合に、ユーザーにエラーメッセージを表示し、再入力を促すことができます。

#include <stdio.h>
int main() {
    int num1, num2;
    // 無効な入力への対処
    printf("2つの整数を入力してください: ");
    if (scanf("%d %d", &num1, &num2) != 2) {
        printf("無効な入力です。整数を2つ入力してください。\n");
        return 1; // エラーコードを返す
    }
    // 入力が正しい場合の処理
    printf("入力された数値は %d と %d です。\n", num1, num2);
    return 0;
}

このプログラムでは、無効な入力が行われた場合にエラーメッセージを表示し、プログラムを終了します。

ループを使った再入力の促し

ループを使って再入力を促すことで、ユーザーが正しい形式で入力するまで繰り返し入力を求めることができます。

#include <stdio.h>
int main() {
    int num1, num2;
    // ループを使った再入力の促し
    while (1) {
        printf("2つの整数を入力してください: ");
        if (scanf("%d %d", &num1, &num2) == 2) {
            break; // 正しい入力が行われた場合、ループを抜ける
        } else {
            printf("無効な入力です。もう一度入力してください。\n");
            // 入力バッファをクリア
            while (getchar() != '\n');
        }
    }
    // 入力が正しい場合の処理
    printf("入力された数値は %d と %d です。\n", num1, num2);
    return 0;
}

このプログラムでは、whileループを使用して、ユーザーが正しい形式で入力するまで繰り返し入力を求めます。

無効な入力が行われた場合には、エラーメッセージを表示し、入力バッファをクリアして再入力を促します。

応用例

C言語での基本的な数値入力と計算を応用して、より複雑な処理を行うことができます。

ここでは、複数の計算を連続して行う方法、入力された数値の平均を求める方法、最大値と最小値を求める方法について解説します。

複数の計算を連続して行う

複数の計算を連続して行うには、ループを使用してユーザーに繰り返し入力を求め、各計算を実行することができます。

#include <stdio.h>
int main() {
    int num1, num2, choice;
    char cont;
    do {
        // 2つの整数を入力
        printf("2つの整数を入力してください: ");
        scanf("%d %d", &num1, &num2);
        // 計算の選択肢を表示
        printf("計算を選択してください (1: 足し算, 2: 引き算, 3: 掛け算, 4: 割り算): ");
        scanf("%d", &choice);
        // 選択された計算を実行
        switch (choice) {
            case 1:
                printf("足し算の結果は %d です。\n", num1 + num2);
                break;
            case 2:
                printf("引き算の結果は %d です。\n", num1 - num2);
                break;
            case 3:
                printf("掛け算の結果は %d です。\n", num1 * num2);
                break;
            case 4:
                if (num2 != 0) {
                    printf("割り算の結果は %.2f です。\n", (float)num1 / num2);
                } else {
                    printf("エラー: 0で割ることはできません。\n");
                }
                break;
            default:
                printf("無効な選択です。\n");
        }
        // 続けるかどうかを確認
        printf("続けますか? (y/n): ");
        scanf(" %c", &cont);
    } while (cont == 'y' || cont == 'Y');
    return 0;
}

このプログラムでは、ユーザーが計算を選択し、結果を表示した後に、続けるかどうかを確認します。

do-whileループを使用して、ユーザーが続けると答える限り、計算を繰り返します。

入力された数値の平均を求める

入力された数値の平均を求めるには、数値の合計を計算し、それを数値の個数で割ります。

#include <stdio.h>
int main() {
    int n, i, num;
    int sum = 0;
    float average;
    // 数値の個数を入力
    printf("数値の個数を入力してください: ");
    scanf("%d", &n);
    // 数値を入力し、合計を計算
    for (i = 0; i < n; i++) {
        printf("数値を入力してください: ");
        scanf("%d", &num);
        sum += num;
    }
    // 平均を計算
    average = (float)sum / n;
    printf("入力された数値の平均は %.2f です。\n", average);
    return 0;
}

このプログラムでは、ユーザーが入力した数値の合計を計算し、その合計を数値の個数で割ることで平均を求めます。

最大値と最小値を求める

入力された数値の中から最大値と最小値を求めるには、各数値を比較して更新する方法を用います。

#include <stdio.h>
int main() {
    int n, i, num;
    int max, min;
    // 数値の個数を入力
    printf("数値の個数を入力してください: ");
    scanf("%d", &n);
    // 最初の数値を入力し、最大値と最小値を初期化
    printf("数値を入力してください: ");
    scanf("%d", &num);
    max = min = num;
    // 残りの数値を入力し、最大値と最小値を更新
    for (i = 1; i < n; i++) {
        printf("数値を入力してください: ");
        scanf("%d", &num);
        if (num > max) {
            max = num;
        }
        if (num < min) {
            min = num;
        }
    }
    printf("最大値は %d です。\n", max);
    printf("最小値は %d です。\n", min);
    return 0;
}

このプログラムでは、最初に入力された数値を最大値と最小値として初期化し、残りの数値を順次比較して最大値と最小値を更新します。

まとめ

C言語での数値入力と計算の実装方法について、基本から応用までを解説しました。

入力エラーの検出やエラーハンドリング、複数の計算を行う方法など、実用的なプログラムを作成するための知識を得ることができたでしょう。

この記事を参考に、実際にプログラムを作成し、C言語の理解を深めてみてください。

関連記事

Back to top button