2016-07-30 7 views
-1

私は単純な電卓をしようとしました。なぜ私は "制御が非空白関数の終わりに達するかもしれない"という警告を得ているのか分からない。 f()関数の場合助言がありますか?ここでコントロールは非void関数のswitchステートメントの終わりに達する可能性があります

は私のコードです:

#include <iostream> 

using namespace std; 

int f(int a, int b, int i){ 
    switch(i){ 
     case 1: return a+b; 
     case 2: return a-b; 
     case 3: return a*b; 
     case 4: return a/b; 
     case 5: return a%b; 
    } 
} 

int main(){ 
    char Continue='y'; 
    int a,b,i; 
    cout<<"1.Add"<<endl<<"2.Subtract"<<endl<<"3.Multiply"<<endl<<"4.Divide"<<endl<<"5.modulus"<<endl; 
do{ 
    cout<<"Enter two numbers:"<<endl; 
    cin>>a; 
    cin>>b; 
    cout<<"Enter the number of what kind of caculation you want to do"; 
    cin>>i; 
    cout<<f(a,b,i); 
    cout<<"Press y to continue/n"; 
    cin>>Continue; 
    }while(Continue=='y'); 
} 
+7

をやっているtldr完全

その部分を何かが、をスキップ? switch文で 'default'の使用法を調べてください。 – Beta

+1

'i'が' 4'または '5'で、' b'が0なら楽しいです。 – PaulMcKenzie

+0

デフォルトではなく、それぞれの場合にbreakステートメントを取得します。これは非常に危険です。 –

答えて

1

iは1、2、3、4、5でもない場合、実行は完全に全体switch声明の上を通過し、より明示的なreturnがないので関数はintを返します。次のようにあなたは、あなたのswitch文の中に一般的な構文をデフォルトのラベルのいくつかのタイプを追加する必要が

+0

iの値を1〜5の範囲に収めるためにif文を追加しました。そうしないと、 "無効"になります。私はあなたが "intを返さなければならない関数からの明示的な復帰はありません"と述べた部分を理解していません。あなたはそれを詳しく教えてもらえますか? – LIHAHA

+0

これはまだreturn文がありません。どのような場合でも、関数から関数を返す必要があることを理解していますか? –

+0

f関数の最後に "return 0"を追加しましたが、エラーはなくなりました。どうもありがとうございました! – LIHAHA

0

がある

switch(value) 
{ 
case 0 : 
//do something 
break; 
case 1: 
break; 
//// add any case as needed 
default : // this would be the line you're missing 
break; 
} 

非ボイドは、それは何も返さないことを意味し、それが返す関数をwittingと同じことです代わりに、あなたはesentially I = 6場合はどうなりますか。この

int non_void() 
{ 
//do stuff but not return anything 
} 
関連する問題