質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

326閲覧

エラー解決ができない

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/12/12 07:04

c

1#include <stdio.h> 2 3int input(){ 4 int a;//選択肢 5 puts("【四則演算】"); 6 puts("四則演算ができるプログラムです。"); 7 puts("和は<1>と入力"); 8 puts("差は<2>と入力"); 9 puts("積は<3>と入力"); 10 puts("商とあまりは<4>と入力"); 11 scanf("%d",&a); 12 switch(a){ 13 case 1: 14 puts("足し算を行います"); 15 break; 16 case 2: 17 puts("引き算を行います"); 18 break; 19 case 3: 20 puts("掛け算を行います"); 21 break; 22 case 4: 23 puts("割り算を行います"); 24 break; 25 return a; 26} 27} 28int inputs(){ 29 int b,answer,num1,num2; 30 b=input(); 31 printf("ひとつ目の数は?:"); 32 scanf("%d",&num1); 33 printf("ふたつ目の数は?:"); 34 scanf("%d",&num2); 35 switch(b){ 36 case 1: 37 answer=num1+num2; 38 break; 39 case 2: 40 answer=num1-num2; 41 break; 42 case 3: 43 answer=num1*num2; 44 break; 45 case 4: 46 answer=num1/num2; 47 break; 48 return answer; 49} 50} 51//変数dは答え 52int putmain(int d){ 53 printf("答えは%dです。\n",d); 54} 55 56int main(){ 57 int answer; 58 answer=inputs(); 59 putmain(answer); 60} 61

c言語で四則演算のプログラムを作成しましたが、
これは、四則を選択して、計算する数を入力し答えを表示するプログラムです。
しかし、このようなエラーが出ます。どうすればよいでしょうか?
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

switch(a){
case 1:
puts("足し算を行います");
break;
case 2:
puts("引き算を行います");
break;
case 3:
puts("掛け算を行います");
break;
case 4:
puts("割り算を行います");
break;
return a;
}

カッコの位置が間違えてますね。

switch(a){
case 1:
puts("足し算を行います");
break;
case 2:
puts("引き算を行います");
break;
case 3:
puts("掛け算を行います");
break;
case 4:
puts("割り算を行います");
break;
}
return a;

だな。cを学びたいならubuntu使わすにwindowsのvisual studio 2017 communityを使う事をおすすめします。こっちの方がエラー文等がしっかり表示されるので、理解も早いですよ。

投稿2018/12/12 07:12

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

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(); }

投稿2018/12/12 07:55

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

putmainに戻り値が無いからでは?

投稿2018/12/12 07:08

iwanote

総合スコア295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/12 07:10

やってみましたが、できませんでした(汗)
退会済みユーザー

退会済みユーザー

2018/12/12 07:11

return で値を返すということですよね?
iwanote

2018/12/12 07:12

return 0を入れるか引数の型をvoid に変更するかですね
iwanote

2018/12/12 07:16

全体的にreturnで返してないようですね・・・ stdioさんの言うとおりinputのほうもswitchの中にreturn入ってるし・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問