Menu Close

C语言的switch 语句和嵌套switch语句

1. switch 语句

C语言中的switch语句测试表达式中变量的值,并依次和其与多种情况比较。 一旦找到匹配,就会执行与该匹配指定的语句块。

switch 语句允许我们在许多备选方案中执行一个代码块。

你可以用 if…else..if 梯子做同样的事情。但是,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 语句可以有一个可选的 默认 case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。

default case 中的 break 语句不是必需的。

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

例1.1 简单的计算器

// Program to create a simple calculator
#include <stdio.h>

int main() {
    char operation;
    double n1, n2;

    printf("Enter an operator (+, -, *, /): ");
    scanf("%c", &operation);
    printf("Enter two operands: ");
    scanf("%lf %lf",&n1, &n2);

    switch(operation)
    {
        case '+':
            printf("%.1lf + %.1lf = %.1lf",n1, n2, n1+n2);
            break;

        case '-':
            printf("%.1lf - %.1lf = %.1lf",n1, n2, n1-n2);
            break;

        case '*':
            printf("%.1lf * %.1lf = %.1lf",n1, n2, n1*n2);
            break;

        case '/':
            printf("%.1lf / %.1lf = %.1lf",n1, n2, n1/n2);
            break;

        // operator doesn't match any case constant +, -, *, /
        default:
            printf("Error! operator is not correct");
    }

    return 0;
}
Enter an operator (+, -, *, /): -
Enter two operands: 32.5
12.4
32.5 - 12.4 = 20.1

用户输入的 – 运算符存储在操作变量中。并且,两个操作数 32.5 和 12.4 分别存储在变量 n1 和 n2 中。

由于操作为-,程序的控制跳转到

printf("%.1lf - %.1lf = %.1lf", n1, n2, n1-n2);

最后,break 语句终止 switch 语句。

例1.2  检查一个整数是否是8

#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退出。

例1.3.把一个1-7内的整数用文字表示出来

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”,该程序会执行后面所有语句。

例1.4.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");
   }
}

结果

2.嵌套switch语句

顾名思义,嵌套switch语句是switch语句里面还有switch语句。

例2.1 查验用户名和密码

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

scanf 命令把标准输入的字符或整数存入到变量的地址内。

初始化的两个整数变量:ID和密码

外部switch语句比较ID输入值,执行与其值匹配的语句块(当ID == 500时)

ID正确的情况下,则利用内部switch语句比较password的输入的值,并执行与匹配的大小相链接的语句(当password == 000时),如果密码不正确,将打印出密码不正确。

如果ID输入不正确,程序将打印出ID不正确。就不进入内部switch语句。

为什么需要switch语句?

if-else语句存在一个潜在问题,即每当替代路径的数量增加时,程序的复杂性就会增加。 如果在程序中使用多个if-else构造,则程序可能会变得难以阅读和理解。

甚至可能使编写程序的开发人员自己都感到困惑。解决此问题的方法是switch语句,简单明了。

摘要:

  • switch语句是 C语言的决策确定(decision making)语句;
  • 涉及多个决策的程序中使用switch语句;
  • switch必须包含可执行的expression;
  • 每个case必须包含一个break;
  • case value必须是常量且唯一;
  • 默认是可选的;
  • 多个switch语句可以相互嵌套。
除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in C语言教程

Related Posts