Menu Close

switch 语句

C语言中的switch语句测试表达式中变量的值,并依次和其与多种情况比较。 一旦找到匹配,就会执行与该匹配指定的语句块。一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。

如果未找到表达式变量匹配的值,则执行默认语句,控制将退出switch语句。

C 语言中 switch 语句的语法:


switch( expression )
{
	case value-1:
			Block-1;
			Break;
	case value-2:
			Block-2;
			Break;
	case value-n:
			Block-n;
			Break;
	default:
			Block-1;
			Break;
}
Statement-x; 

 

  • switch 语句中的 expression 是一个常量表达式,必须是一个整型或字符类型。
  • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值(value-1, value-2, … value-n) 和一个冒号。
  • case 的 常量值(value-1, value-2, … value-n) (必须与 switch 中的expression变量具有相同的数据类型,且必须是一个常量。
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句(Block-1, or Block-2, or Block-n)将被执行,直到遇到 break 语句为止。
  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行(Statement-x)。
  • 每一个 case 都需要包含 break(我们主张,但如果没有break也行,程序变复杂)
  • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
  • 可以使用嵌套switch语句

switch 语句的流程图

下面图可以看出各个case的选择和控制流如何退出。

例一:

以下code可以示范switch语句是如何工作的:

#include <stdio.h>
    int main() {
        int num = 8;
        switch (num) {
            case 7:
                printf("Value is 7");
                break;
            case 8:
                printf("Value is 8");
                break;
            case 9:
                printf("Value is 9");
                break;
            default:
                printf("Out of range");
                break;
        }
        return 0;
    }

结果:

Value is 8

  1. 赋予初始化整数变量num的值为8。
  2. switch语句开始把每个case的值和存储在变量num中的值进行比较。
  3. 在该程序中,由于存储在变量num中的值为8,到case 8后, num 找到匹配的值,执行打印语句然后break退出。

例二

main(){ 
 int a; 
 printf("input integer number between 1 - 7: "); 
 scanf("%d",&a); 
 switch (a)
   { 
     case 1:
         printf("Monday\n"); 
         break;
     case 2:
         printf("Tuesday\n"); 
         break;
     case 3:
         printf("Wednesday\n"); 
         break;
     case 4:
         printf("Thursday\n"); 
         break;
     case 5:
         printf("Friday\n"); 
         break;
     case 6:
         printf("Saturday\n"); 
         break;
     case 7:
         printf("Sunday\n"); 
         break;
    default:
        printf("error\n"); 
        break;
  } 
}

如果不用“break”,该程序会执行后面所有语句。

下列switch语句也是合法的

例三

#include <stdio.h>
int main() {
int number=5;
switch (number) {
  case 1:
  case 2:
  case 3:
    printf("One, Two, or Three.\n");
    break;
  case 4:
  case 5:
  case 6:
    printf("Four, Five, or Six.\n");
    break;
  default:
    printf("Greater than Six.\n");}}

输出结果:

Four, Five, or Six.

嵌套switch语句

顾名思义,嵌套switch语句是switch语句里面还有switch语句。如以下程序:

例四


#include <stdio.h>
int main() {
        int ID = 500;
        int password = 000;
        printf("Plese Enter Your ID:\n ");
        scanf("%d", & ID);
        switch (ID) {
            case 500:
                printf("Enter your password:\n ");
                scanf("%d", & password);
                switch (password) {
                    case 000:
                        printf("Welcome Dear Programmer\n");
                        break;
                    default:
                        printf("incorrect password");
                        break;
                }
                break;
            default:
                printf("incorrect ID");
                break;
        }
}

这是一个小型的人机对话程序。如果你输入ID500,和password000,机器将显示欢迎你,否则,会显示不正确的ID或密码。

scanf 命令是等待输入命令。

  1. 初始化的两个整数变量:ID和密码
  2. 外部switch语句比较ID输入值,执行与其值匹配的语句块(当ID == 500时)
  3. ID正确的情况下,则利用内部switch语句比较password的输入的值,并执行与匹配的大小相链接的语句(当password == 000时),如果密码不正确,将打印出密码不正确。
  4. 如果ID输入不正确,程序将打印出ID不正确。就不进入内部switch语句。

 

为什么需要switch语句?

if-else语句存在一个潜在问题,即每当替代路径的数量增加时,程序的复杂性就会增加。 如果在程序中使用多个if-else构造,则程序可能会变得难以阅读和理解。 甚至可能使编写程序的开发人员自己都感到困惑。解决此问题的方法是switch语句,简单明了。

摘要:

  • switch语句是 C语言的决策确定(decision making)语句
  • 涉及多个决策的程序中使用switch语句
  • switch必须包含可执行的expression
  • 每个case必须包含一个break
  • case value必须是常量且唯一
  • 默认是可选的
  • 多个switch语句可以相互嵌套。