当我们有多个条件并且我们需要根据条件执行不同的操作时,使用switch case
语句。当我们有多个条件时,我们需要在满足特定条件时执行一个语句块。在这种情况下,我们可以使用冗长的 if..else-if
语句或switch case
。冗长if..else-if
的问题是当我们有几个条件时它会变得复杂。switch-case
是处理这种情况的干净而有效的方法。
switch case
语句的语法:
switch (variable or an integer expression)
{
case constant:
//C++ code
;
case constant:
//C++ code
;
default:
//C++ code
;
}
即使break
语句是可选的,switch case
语句也大量使用break
语句。我们将首先看到一个没有break
语句的例子,然后我们将讨论switch case
和break
。
switch-case
示例
#include <iostream>
using namespace std;
int main(){
int num=5;
switch(num+2) {
case 1:
cout<<"Case1: Value is: "<<num<<endl;
case 2:
cout<<"Case2: Value is: "<<num<<endl;
case 3:
cout<<"Case3: Value is: "<<num<<endl;
default:
cout<<"Default: Value is: "<<num<<endl;
}
return 0;
}
输出:
Default: Value is: 5
说明:在swicth
中我给出了一个表达式,你也可以给出变量。我给了表达式num + 2
,其中num
值是 5,并且在相加之后表达式得到 7。由于没有用值 4 定义的情况,所以执行了默认情况。
switch-case
流程图
它求值表达式或变量的值(基于switch
括号内给出的内容),然后根据结果执行相应的情况。
switch-case
中的break
语句
在我们讨论break
语句之前,让我们看看当我们在switch case
中不使用break
语句时会发生什么。请参阅以下示例:
#include <iostream>
using namespace std;
int main(){
int i=2;
switch(i) {
case 1: cout<<"Case1 "<<endl;
case 2: cout<<"Case2 "<<endl;
case 3: cout<<"Case3 "<<endl;
case 4: cout<<"Case4 "<<endl;
default: cout<<"Default "<<endl;
}
return 0;
}
输出:
Case2
Case3
Case4
Default
在上面的程序中,我们在switch
括号内部有变量i
,这意味着无论变量i
的值是什么,都会执行相应的case
块。我们已将整数值 2 传递给switch
,因此控制流切换到case 2
,但是在case 2
之后我们没有使用break
语句,导致控制流继续到后续case
直到结束。然而,这不是我们想要的,我们想要执行正确case
块并忽略其余的块。这个问题的解决方案是在每个case
块之后使用break
语句。
当您希望程序流从switch
主体中出来时,使用break
语句。每当在switch
主体中遇到break
语句时,执行流程将直接从switch
中出来,忽略其余的情况。这就是您必须使用break
语句结束每个case
块的原因。
让我们采用相同的例子,但这次使用break
语句。
#include <iostream>
using namespace std;
int main(){
int i=2;
switch(i) {
case 1:
cout<<"Case1 "<<endl;
break;
case 2:
cout<<"Case2 "<<endl;
break;
case 3:
cout<<"Case3 "<<endl;
break;
case 4:
cout<<"Case4 "<<endl;
break;
default:
cout<<"Default "<<endl;
}
return 0;
}
输出:
Case2
现在您可以看到只有case 2
被执行,其余的后续case
被忽略了。
为什么我在default
块不使用break
语句?
控制流本身会在默认情况下从switch
中出来,所以我之后没有使用break
语句,但是如果你想要它可以使用它,那么这样做是没有害处的。
重要笔记
1)case
并不总是需要顺序1,2,3
等。它可以在case
关键字后面包含任何整数值。此外,case
不需要始终按升序排列,您可以根据要求以任何顺序指定它们。
2)您也可以在switch-case
中使用字符。例如:
#include <iostream>
using namespace std;
int main(){
char ch='b';
switch(ch) {
case 'd': cout<<"Case1 ";
break;
case 'b': cout<<"Case2 ";
break;
case 'x': cout<<"Case3 ";
break;
case 'y': cout<<"Case4 ";
break;
default: cout<<"Default ";
}
return 0;
}
3)允许嵌套switch
语句,这意味着你可以在另一个switch
内部使用switch
语句。但是应该避免使用嵌套的switch
语句,因为它会使程序更复杂,更不易读。