質問: ``` #include int input(){ int a;//選択肢 puts("【四則演算】"); puts("四則演算ができるプログラムです。"); puts("和は<1>と入力"); puts("差は<2>と入力"); puts("積は<3>と入力"); puts("商とあまりは<4>と入力"); scanf("%d",&a); switch(a){ case 1: puts("足し算を行います"); break; case 2: puts("引き算を行います"); break; case 3: puts("掛け算を行います"); break; case 4: puts("割り算を行います"); break; return a; } } int inputs(){ int b,answer,num1,num2; b=input(); printf("ひとつ目の数は?:"); scanf("%d",&num1); printf("ふたつ目の数は?:"); scanf("%d",&num2); switch(b){ case 1: answer=num1+num2; break; case 2: answer=num1-num2; break; case 3: answer=num1*num2; break; case 4: answer=num1/num2; break; return answer; } } //変数dは答え int putmain(int d){ printf("答えは%dです。\n",d); } int main(){ int answer; answer=inputs(); putmain(answer); } ``` c言語で四則演算のプログラムを作成しましたが、 これは、四則を選択して、計算する数を入力し答えを表示するプログラムです。 しかし、このようなエラーが出ます。どうすればよいでしょうか? ![![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/003ba272356c8882aae406e13583606d.png)](a42251b8c73fc8a09a10ad30f2b7de37.png)
回答: switch構文にdefault:が無いので、1,2,3,4以外の入力があった場合にswitch構文から外れて、return文が実行されないまま関数の実行が終わっているのだと思われます。 "warning: control reaches end of non-void function"というエラーメッセージは、 [直訳]注意: voidではない関数の最後に達しました([意訳]本当だったら、最後に達する前にreturnで値を返さなきゃいけないのに) という意味です。 input関数なら以下のようにdefault:の処理を追加する。 ``` int input(){ int a;//選択肢 puts("【四則演算】"); puts("四則演算ができるプログラムです。"); puts("和は<1>と入力"); puts("差は<2>と入力"); puts("積は<3>と入力"); puts("商とあまりは<4>と入力"); scanf("%d",&a); switch(a){ case 1: puts("足し算を行います"); break; case 2: puts("引き算を行います"); break; case 3: puts("掛け算を行います"); break; case 4: puts("割り算を行います"); break; default: // 1,2,3,4以外の入力の場合 printf("不正な値 %d が入力されました\n",a); break; } return a; } ``` そして、inputs関数では、inputで1,2,3,4以外を入力された時の対処として ``` b=input(); ``` の行を以下のように変更して、1未満や5以上が入力された場合に入力を繰り返すようにします。 ``` b=0; while (b<1 || b>4) { b=input(); } ```