2016-07-30 73 views
-1

我试图做一个简单的计算器。不明白为什么我会收到“控制可能达到非无效功能结束”的警告。为f()函数。有什么建议么?控制可能会达到无效功能开关语句结束

这是我的代码:

#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

会发生什么,如果我= 6?在switch语句中查看'default'的使用。 – Beta

+1

如果'i'为'4'或'5'且'b'为0,这也很有趣。 – PaulMcKenzie

+0

对于除默认值之外的每种情况,获取那些break语句。这非常危险。 –

回答

1

因为如果i既不是1,2,3,4,5,则执行越过整个switch声明完全,并且存在从一个没有明确return函数应该返回一个int

+0

我添加了一个if语句,以便在1-5范围内收缩我的值,否则它会关闭“无效”。我不明白你提到的那部分“没有明确的返回函数应该返回一个int”。你能详细说明一下吗? – LIHAHA

+0

它仍然缺少一个return语句。你是否明白在任何情况下你都需要从函数中返回一些东西? –

+0

我在f函数的末尾添加了“return 0”,现在错误消失了。非常感谢你! – LIHAHA

0

你需要添加一些类型的默认标签到您的switch语句,一般的语法如下

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

非空意味着它不返回任何东西,这是同样的事情知晓返回功能一个东西,而是你跳过这一部分完全

tldr你esentially这样

int non_void() 
{ 
//do stuff but not return anything 
} 
相关问题