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

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

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

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

Q&A

解決済

3回答

6801閲覧

c言語 入門レベル問題 Control reaches the end of a non-void function

GokaTokyo

総合スコア66

C

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

0グッド

0クリップ

投稿2018/01/04 14:29

下記コード実行したら、Control reaches the end of a non-void function というエラー出ました。解決方法教えていただけますか。

#include <stdio.h> // プロトタイプ宣言 int hantei(int l,int s); int main() { int i = 0 ,s = 0 ,l = 0 ,a = 0; printf("数値を入力してください==>"); scanf("%d",&s); printf("数当てゲーム!チャンスは10回!\n"); //10回繰り返す for(i=0;i<10;i++){ printf("数値を入力!==>"); scanf("%d",&l); //自作関数hantei の呼び出し a = hantei(s,l); //もしa==0ならばbreakで抜ける if(a == 0){ break; } } //a != 0 ならば以下の処理を行う if(a != 0){ printf("残念!正解の数値は%dです\n",s); } return 0; } //判定部分 int hantei(int s,int l) { //l よりsが大きければ if(l < s){ printf("正解の数値は大きいです\n"); //戻り値として1を返す return 1; } //lよりsが小さければ if(l > s){ printf("正解の数値は小さいです\n"); //戻り値として2を返す return 2; } //lとsが同じならば if(l==s){ printf(" 大正解です!\n"); //戻り値として0を返す return 0; } }

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

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

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

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

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

guest

回答3

0

ベストアンサー

Control reaches the end of a non-void function というエラー出ました

warning: control reaches end of non-void function [-Wreturn-type]ですね?
これはエラーではなく警告です。コンパイル自体は出来ています。

原因と対処

関数hantei内のif文の条件は全て排他的ですが、コンパイラはそれに気付いていないようです。
次のどちらかで対処できます。

if-elseを使う

C

1int hantei(int s,int l) 2{ 3 //l よりsが大きければ 4 if(l < s){ 5 printf("正解の数値は大きいです\n"); 6 //戻り値として1を返す 7 return 1; 8 } 9 10 //lよりsが小さければ 11 else if(l > s){ 12 printf("正解の数値は小さいです\n"); 13 //戻り値として2を返す 14 return 2; 15 } 16 17 //lとsが同じならば 18 else { 19 printf(" 大正解です!\n"); 20 //戻り値として0を返す 21 return 0; 22 } 23}

最後に条件判定しないようにする

C

1int hantei(int s,int l) 2{ 3 //l よりsが大きければ 4 if(l < s){ 5 printf("正解の数値は大きいです\n"); 6 //戻り値として1を返す 7 return 1; 8 } 9 10 //lよりsが小さければ 11 if(l > s){ 12 printf("正解の数値は小さいです\n"); 13 //戻り値として2を返す 14 return 2; 15 } 16 17 //lとsが同じならば 18 printf(" 大正解です!\n"); 19 //戻り値として0を返す 20 return 0; 21}

後者の方が個人的には綺麗でわかりやすく思えます。

投稿2018/01/04 14:38

編集2018/01/04 14:39
LouiS0616

総合スコア35660

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

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

0

c

1 //lとsが同じならば 2 if(l==s){ 3 printf(" 大正解です!\n"); 4 //戻り値として0を返す 5 return 0; 6 } 7 return 0;

最後にreturn 0を入れる必要がありますね。

投稿2018/01/04 14:34

toshiyan

総合スコア74

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

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

0

投稿2018/01/04 14:33

Zuishin

総合スコア28660

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

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

GokaTokyo

2018/01/04 14:59

質問前に調べて、同じなもの出てきたが、頭悪くて、また、解決できなかったため、質問した。
Zuishin

2018/01/04 15:05

頭の良し悪しは知りませんが、了解しました。 しかし何も書いていないのでは何もしていないように見えます。 解決法をみつけたならそのページを紹介してどこがわからないのか尋ねてください。 質問履歴を見ると C の基礎はわかったと書いてあったので、調べる方法を知らないだけだと思ってメッセージでググることを勧めました。
GokaTokyo

2018/01/05 09:54

色々壁ありそうですので、引き続き応援お願いしますね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問