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言語のプログラムは理解しやすくなります。まずは「関数に渡す→処理する→結果を返す→受け取る」という流れを意識して練習するとよいでしょう。

コメント