C++ switch-case语句

当我们有多个条件并且我们需要根据条件执行不同的操作时,使用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 casebreak

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括号内给出的内容),然后根据结果执行相应的情况。

C++ switch-case语句

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语句,因为它会使程序更复杂,更不易读。

赞(0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址