提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、switch语句用法注意事项,如何正确使用switch语句?
  • 二、使用步骤
    • 1.使用default语句
    • 2.使用
    • 3.嵌套使用
    • 3.tips
  • 总结

前言

相对于 if 语句而言,switch 语句可以更方便地应用于多个分支的控制流程。C89 指明,一个 switch 语句最少可以支持 257 个 case 语句,而 C99 则要求至少支持 1023 个 case 语句。然而,在实际开发环境中,为了程序的可读性与执行效率,应该尽量减少 switch 语句中的 case 语句。

除此之外,switch 语句与 if 语句不同的是,switch 语句只能够测试是否相等,因此,case 语句后面只能是整型或字符型的常量或常量表达式;而在 if 语句中还能够测试关系与逻辑表达式。
不要忘记在 case 语句的结尾添加 break 语句


提示:以下是本篇文章正文内容,下面案例可供参考

一、switch语句用法注意事项,如何正确使用switch语句?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、使用步骤

1.使用default语句

代码如下(示例):在 switch 语句中,每个 case 语句的结尾不要忘记添加 break 语句,否则将导致多个分支重叠。当然,除非有意使多个分支重叠,这样可以免去 break 语句。下面我们来看一个实际示例。

不要忘记在 switch 语句的结尾添加 default 语句
在 switch 语句中,default 语句主要用于检查默认情况,或者处理错误情况,如下面的示例代码所示:

default:printf("error\n");break;

如果在 switch 语句中去掉 default 语句,那么 switch 语句将失去对默认情况与错误情况的处理能力。所以,奉劝大家不要偷懒,老老实实把每一种情况都用 case 语句来完成,而把真正对默认情况的处理交给 default 语句来完成。即使程序真的不需要 default 处理,也应该保留此语句:

default:break;

这样做并非画蛇添足,可以避免令人误以为你忘记了 default 处理。

#include <stdio.h>
void print_week(unsigned int day);
void print_week(unsigned int day)
{switch(day){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;}
}
int main (void)
{print_week(3);return 0;}该程序中,在 print_week 函数中通过 switch 语句实现根据数字输出星期名称的功能。执行代码,程序将输出“Wednesday”。

2.使用

代码如下(示例):现在,如果将 case 1~case 4 的 break 语句去掉,如下代码所示,程序会输出什么结果呢?

#include <stdio.h>
void print_week(unsigned int day);
void print_week(unsigned int day)
{switch(day){case 1:printf("Monday\n");case 2:printf("Tuesday\n");case 3:printf("Wednesday\n");case 4:printf("Thursday\n");case 5:printf("Friday\n");break;case 6:printf("Saturday\n");break;case 7:printf("Sunday\n");break;default:printf("error\n");break;}
}
int main (void)
{print_week(3);return 0;
}

运行结果为:
Wednesday
Thursday
Friday


3.嵌套使用

尽量将长的 switch 语句转换为嵌套的 switch 语句
有时候,当一个 switch 语句中包括很多个 case 语句时,为了减少比较的次数,可以把这类长 switch 语句转为嵌套 switch 语句,即把发生频率高的 case 语句放在一个 switch 语句中,作为嵌套 switch 语句的最外层;把发生频率相对低的 case 语句放在另一个 switch 语句中,放置于嵌套 switch 语句的内层。
例如,下面的代码把发生频率相对较低的情况放置于默认的 case 语句内。

void print_week(unsigned int day)
{switch(day){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;default:switch(day){case 6:printf("Saturday\n");break;case 7:printf("Sunday\n");break;default:printf("error\n");break;}}
}

运行结果为:
在上面的代码中,假设 case 6 与 case 7 不经常发生,因此将它们放置到嵌套 switch 语句的最内层。从表面看,虽然这样损失了程序的一定可读性,但当 case 语句很多,并且确实有些 case 语句发生的频率比较低时,这种解决方案还是可取的。


3.tips

不要为了使用 case 语句而刻意构造一个变量
在实际编程应用中,switch 中的 case 语句应该只用于处理简单的、容易分类的数据。如果数据并不简单,却为了使用 case 语句而刻意构造一个变量,那么这种变量很容易令我们得不偿失。因此应该严格避免这种变量,并使用 if/else 结构来处理这类程序,如下面的示例代码所示:

void print_week(unsigned int day)
{switch(day){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;default:switch(day){case 6:printf("Saturday\n");break;case 7:printf("Sunday\n");break;default:printf("error\n");break;}}
}

由此可见,当为了使用 case 语句而刻意构造一个变量时,真正的数据可能不会按照我们所希望的方式映射到 case 语句。因此,我们应该严格避免为了使用 case 语句而刻意构造一个变量,并使用 if/else 结构来处理这类程序,如下面的示例代码所示:

if(0 == strcmp("ab",c))
{f1();
}
else if(0 == strcmp("bc",c))
{f2();
}
else if(0 == strcmp("cd",c))
{f3();
}
else
{}

总结

1.要使用default。 2.尽量使用嵌套 3.必要的时候使用if/else


Switch使用方法相关推荐

  1. foreach跳出本次/当前循环与终止循环方法及switch跳出方法

    目录 1.普通for循环 2.java中的foreach循环 3.js中的foreach循环 4.switch 1.普通for循环 continue :当满足某个条件时,想要跳出本次循环继续执行下次循 ...

  2. swift-switch使用方法

    // Playground - noun: a place where people can playimport UIKit//----------------------------------- ...

  3. php后端switch,详解PHP中php switch的方法实例_后端开发

    php+javascript实现用户注册模块(附源码)_后端开发 在任何一个网站内都需要注册功能,本文讲述了利用html . javascript . ajax . php和MySQL实现简单的注册功 ...

  4. 16000亿!谷歌发布人类历史首个万亿级模型 Switch Transformer,中国还有机会赶超吗?...

    新年伊始,大规模预训练模型军备竞赛进入万亿参数时代.  文:梦佳.周寅张皓.贾伟 近日,Google Brain的研究人员William Fedus.Barret Zoph.Noam Shazeer等 ...

  5. 【超坑人的面试题】switch没有break

    下面的方法,当输入为2的时候返回值是多少? public static int getValue(int i) {int result = 0;switch (i) {case 1:result = ...

  6. switch监听android代码,Android switch当代码setCheck时,不调用onCheckedChanged

    最近做项目需要使用switch控件去设置手势密码,当手动打开或者关闭switch控件时,会跳转到设置手势密码页面,并且设置成功后,会保存switch状态到文件中.每次进入手势密码页面,都去获取swit ...

  7. 共享纸巾机系统开发,关于Switch的使用

    官方Switch教程方法: switch ($x) { case 1:echo "Number 1";break; case 2:echo "Number 2" ...

  8. VantUi 底部Tabbar跳转页面的方法以及产生的Bug问题

    第一种方法:使用计算属性(computed)进行(if判断 / switch case) 需要加上get()和set(),不然报错 <template><div><van ...

  9. 使用数组方式代替switch增强代码可读性

    使用数组方式代替switch增强代码可读性 在进行前端学习+开发的过程中,个人提供一种一些特殊例子可以使用数组的arr.indexOf()来替代switch的代码. 举个例子,js的new Date( ...

  10. java switch商品优惠_switch用法_switch

    任天堂新NS主机Switch功能及使用方法介绍(4 550x380 - 46KB - JPEG Java实例-enum和switch语句的用法 - 今日头条 555x437 - 20KB - JPEG ...

最新文章

  1. openfire安装配置完全教程
  2. 【java学习】常用实体类--String、StringBuffer\StringTokenizer
  3. SAP Spartacus的user id
  4. 可变参数(不定项参数)
  5. Theano 中文文档 0.9 - 5.3 Windows安装说明
  6. 详解CSS position属性
  7. dmb: 数据库监控及灾备系统(for mysql)_MySQL企业级数据库灾备(备份)系统-DMB v2.1发布...
  8. 调试系列2:bugreport实战篇
  9. Android开发从0到1学习(知识+路线)
  10. 在matlab使用矩阵的方法计算DFT
  11. gazebo创建机器人模型01
  12. Java Graphics2D的使用
  13. java文件拒绝访问权限_运行java文件,一直显示拒绝访问,谁知道哪里出了問題≥﹏≤...
  14. 我的世界正版端游服务器ip地址,我的世界1period;8小游戏服务器ip地址 | 手游网游页游攻略大全...
  15. ArcGIS打开影像图显示全黑色解决办法
  16. Excel进行两张表的联结
  17. Python微信远程控制摄像头-拍摄女朋友坐电脑前聊天时表情
  18. WDM音频驱动程序概览
  19. 有N个人围成一圈,从第一个人开始报数,数到3的人出列,直到最后一个人,问他的编号
  20. 服务器被攻击了,更换IP是否有用吗

热门文章

  1. 已知特征多项式求所有对应的二阶矩阵
  2. mysql导出数据为txt时报错:The MySQL server is running with the --secure-file-priv option so it cannot execut
  3. Excel中Alt快捷键的用法
  4. 翻译:最令人印象深刻的YouTube频道,可让您学习AI,机器学习和数据科学
  5. coherence mysql_Coherence Step by Step 第三篇 缓存(二) 配置(翻译)
  6. xtu oj 1078
  7. cpu爆了怎么排查和处理_怎么清理cpu,怎样可以证明cpu坏没坏-
  8. 单核CPU vs. 多核CPU
  9. 物联网技术应用成商业市场盈利关键
  10. java poi 图片居中,poi word table 居中 poi word table