本文目录导读:

  1. switch 的基本语法
  2. switch 到底有什么用?——一个生动的例子
  3. 必须注意的“穿透”现象
  4. switch 和 if-else 怎么选?
  5. break 和 default 的小细节

C语言中的switch到底是啥意思?一篇讲透它的用法和精髓

很多初学C语言的朋友,看到

switch

这个单词,第一反应是“切换”、“开关”——没错,它在英文里确实是这个意思,但在C语言中,

switch

是一种多分支选择结构,专门用来根据一个整型表达式的值,跳转到对应的

case

分支去执行代码,简单说,它就是“多路开关”:一个值,对应多条不同的路,走到哪条路就干哪件事。

分支去执行代码,简单说,它就是“多路开关”:一个值,对应多条不同的路,走到哪条路就干哪件事。

switch 的基本语法

先看一个标准模板:

switch (表达式)  // 表达式必须是整型(int、char、short、long、enum等)

{

case 常量1:

// 当表达式 == 常量1 时执行的代码

break; // 跳出一整个switch(重要!)

case 常量2:

// 当表达式 == 常量2 时执行的代码

break;

// 可以有很多 case

default: // 可选的,所有case都不匹配时执行

// 代码

break;

}

要点:

  • 表达式的结果必须是整数或字符(C语言中字符本质是ASCII整数)。
  • 每个
  • case

    后面的常量必须是整型常量(不能是变量,

    case a:

    错误,但

    case 3+2:

    可以,因为编译期能算出来)。

  • 可以,因为编译期能算出来)。
  • break

    用来跳出

    switch

    ,如果没有

    break

    ,会继续执行下一个

    case

    的代码,这叫“穿透(fall-through)”。

  • 的代码,这叫“穿透(fall-through)”。
  • switch 到底有什么用?——一个生动的例子

    假设你写一个菜单程序:用户输入 1~5 分别代表不同的功能,你不用写一大串

    if-else if

    ,用

    switch

    更清晰:

    更清晰:

    int main()

    {

    int choice;

    printf("请输入数字:1.查余额 2.取款 3.存款 4.转账 5.退出\n");

    scanf("%d", &choice);

    switch (choice)

    {

    case 1:

    printf("您的余额是 100 元。\n");

    break;

    case 2:

    printf("请放入银行卡,输入取款金额。\n");

    break;

    case 3:

    printf("请放入现金。\n");

    break;

    case 4:

    printf("请输入对方账号。\n");

    break;

    case 5:

    printf("谢谢使用,再见!\n");

    break;

    default:

    printf("无效输入!\n");

    break;

    }

    return 0;

    }

    对比用

    if-else

    的写法:

    的写法:

    if (choice == 1) { ... }

    else if (choice == 2) { ... }

    else if (choice == 3) { ... }

    else if (choice == 4) { ... }

    else if (choice == 5) { ... }

    else { ... }

    两种都能做,但

    switch

    可读性明显更好,逻辑更直观。

    可读性明显更好,逻辑更直观。

    必须注意的“穿透”现象

    不加

    break

    会怎样?看这个例子:

    会怎样?看这个例子:

    int a = 2;

    switch (a)

    {

    case 1: printf("一");

    case 2: printf("二");

    case 3: printf("三");

    }

    输出结果是:“二 三”

    因为

    a=2

    匹配了

    case 2

    ,但没遇到

    break

    ,它就会自动继续往下执行,直到遇到

    break

    或者 switch 结束,这就是穿透。

    或者 switch 结束,这就是穿透。

    什么时候利用穿透?

    有些场景故意用穿透来合并多个条件,例如判断月份天数:

    int month = 2, days;

    switch (month)

    {

    case 1: case 3: case 5: case 7: case 8: case 10: case 12:

    days = 31; // 这些月份都是31天

    break;

    case 4: case 6: case 9: case 11:

    days = 30;

    break;

    case 2:

    days = 28; // 平年

    break;

    }

    这样写比每个case单独写一大段代码要简洁。

    switch 和 if-else 怎么选?

    场景推荐用
    判断条件是一个整数/字符变量的不同取值,且分支较多(3个以上)switch
    判断条件涉及范围(如a > 10

    )、浮点数、字符串、复杂的逻辑表达式if-else
    分支很少(2~3个)两者都可以,但if更灵活
    )、浮点数、字符串、复杂的逻辑表达式if-else
    分支很少(2~3个)两者都可以,但if更灵活

    注意:switch 不支持浮点数判断,

    switch (3.14)

    就会报错。

    就会报错。

    break 和 default 的小细节

    • default

      不一定放在最后,但习惯上放最后,它只是“所有case都不匹配时执行”的兜底。

    • 不一定放在最后,但习惯上放最后,它只是“所有case都不匹配时执行”的兜底。
    • default

      不写,且没有任何 case 匹配,则整个 switch 什么都不执行。

    • 不写,且没有任何 case 匹配,则整个 switch 什么都不执行。
    • 每个
    • case

      里面最后一条语句如果是

      break

      ,可以省略吗?不可以!除非你明确想要穿透,漏掉

      break

      是初学者最常见的 bug,记得检查。

    • 是初学者最常见的 bug,记得检查。
    • switch

      在C语言中就是“根据一个整数,跳到对应的标签去干活”,它让多分支代码简洁、清晰、容易维护,记住三点:

      在C语言中就是“根据一个整数,跳到对应的标签去干活”,它让多分支代码简洁、清晰、容易维护,记住三点:

    • 表达式必须是整型
    • 每个 case 后加
    • break

      防穿透(除非故意)。

    • 防穿透(除非故意)。
    • default

      做兜底处理。

    • 做兜底处理。
    • 写小程序、菜单、状态机的时候,

      switch

      是你的好帮手,希望这篇文章让你彻底明白“switch啥意思”了——它就是一把多路开关,按哪个数字,走哪条路。

      是你的好帮手,希望这篇文章让你彻底明白“switch啥意思”了——它就是一把多路开关,按哪个数字,走哪条路。

      include-switch游戏下载社区