C言語の関数で戻り値を受け取る方法|returnとwhile文で15の倍数チェックプログラムを作る

C言語関連

C言語で関数を使ったプログラムを作成するとき、多くの初学者がつまずくポイントが「returnで返した値をmain関数側でどう受け取るか」という部分です。特に条件判定と繰り返し処理を組み合わせる場合、関数の役割と戻り値の流れを整理することが重要になります。

この記事では、入力した整数が3と5の両方で割り切れるかを判定する「15の倍数チェッカー」を例に、関数の戻り値をmain関数で受け取り、while文で繰り返し処理する方法を解説します。

C言語のreturnは値を返すだけで自動的には保存されない

自作関数でreturnを書くと、その値は関数を呼び出した場所へ返されます。しかし、返された値を変数などに代入しなければ、main関数側で利用することはできません。

例えば、以下のような関数がある場合、check_division(sei);と書くだけでは戻り値を受け取っていません。

戻り値を利用する場合は、hantei = check_division(sei);のように変数へ代入する必要があります。

関数から返された0や1などの情報をmain関数で判断することで、その後の処理を分岐できます。

15の倍数チェックで必要な処理の流れを整理する

今回のプログラムでは、まず整数を入力し、その値をcheck_division関数へ渡します。

check_division関数では、入力された数字が3でも5でも割り切れるかを確認します。条件を満たしていれば15の倍数なので0を返し、それ以外なら1を返します。

main関数では戻り値を受け取り、0なら終了、1なら再び入力を求めるという流れにします。

戻り値を受け取る正しいプログラム例

以下のように書くと、関数の戻り値をmain関数で正しく利用できます。

#include <stdio.h>

int check_division(int sei);

int main(void)
{
    int sei;
    int hantei;

    while (1)
    {
        printf("整数を入力してください-->");
        scanf("%d", &sei);

        hantei = check_division(sei);

        if (hantei == 0)
        {
            break;
        }
    }

    return 0;
}

int check_division(int sei)
{
    if (sei % 3 == 0 && sei % 5 == 0)
    {
        printf("15の倍数です。\n");
        return 0;
    }
    else
    {
        printf("15の倍数ではありません\n");
        return 1;
    }
}

このプログラムでは、while文の中で入力と判定を繰り返しています。そしてcheck_division関数が返した値をhanteiという変数に保存し、その値によってループを終了するか判断しています。

例えば30を入力した場合、check_division関数は0を返します。その結果、if文の条件が成立してbreakが実行され、プログラムが終了します。

元のコードでうまく動かなかった原因

作成したコードでは、check_division(sei);と関数を呼び出していますが、返された値をどこにも保存していません。

つまり、関数側ではreturn 0やreturn 1を実行していても、main関数側ではその結果を知らない状態になっています。

また、while文の最初にhanteiを1で初期化していますが、その後もhanteiの値を更新していないため、if(hantei == 0)の条件は一度も正しく変化しません。

戻り値を使う場合は「関数を呼ぶ→戻り値を変数へ入れる→その変数を条件式で使う」という流れを意識すると理解しやすくなります。

C言語の関数と戻り値を理解するコツ

関数は「処理をお願いする箱」と考えると理解しやすくなります。main関数から数字を渡すと、関数内で処理を行い、結果をreturnで返してくれます。

例えば電卓関数なら、数字を渡すと計算結果を返します。今回のcheck_division関数の場合は、計算結果ではなく「成功なら0、失敗なら1」という判定結果を返していると考えられます。

戻り値は画面に表示されるものではなく、プログラム内部で次の処理を決めるための情報です。そのため、受け取る変数を用意することが大切です。

まとめ

C言語で関数のreturnを利用するときは、返された値をmain関数側で受け取る必要があります。単純に関数を呼び出すだけでは、戻り値を利用できません。

今回の15の倍数チェックでは、hantei = check_division(sei);のように戻り値を変数へ代入し、その値をif文やwhile文の条件に使うことで正しく動作します。

関数、引数、return、ループ処理の関係を一つずつ整理すると、C言語のプログラムは理解しやすくなります。まずは「関数に渡す→処理する→結果を返す→受け取る」という流れを意識して練習するとよいでしょう。

コメント

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