【C语言】switch语句的理解

这篇具有很好参考价值的文章主要介绍了【C语言】switch语句的理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 基本语法结构

任何具有判定能力的语法结构,都必须具备 判定+分支 功能

在 switch 语法结构中:

  • case 完成的判定功能
  • break 完成的是分支功能
  • default 处理异常情况
    【C语言】switch语句的理解

举例

根据输入的数字,打印出今天是星期几

int main()
{
	int day = 0;
	while (1)
	{
		printf("Please Enter Your Day# ");
		scanf("%d", &day);
		switch (day) //整型常量、变量或整型表达式
		{
		case 1:
			printf("星期一\n");
			break;
		case 2:
			printf("星期二\n");
			break;
		case 3:
			printf("星期三\n");
			break;
		case 4:
			printf("星期四\n");
			break;
		case 5:
			printf("星期五\n");
			break;
		case 6:
			printf("星期六\n");
			break;
		case 7:
			printf("星期天\n");
			break;
		default:
			printf("input error\n");
			break;
		}
	}
	return 0;
}

编译运行:
【C语言】switch语句的理解

二. 几点补充

补充一:关于 default 分支

每次写 switch 语句时,即使程序真的不需要 default 处理,也应该保留以下语句:

default:
	break;

这并非画蛇添足,可以避免让人误以为你忘了 default 处理。而且本来 switch 就适合用在分支较多的情况,最后的 default 也可以方便后续维护代码。

PS:语义上 default 应该放在结尾处,但实际上它可以放在 switch 中的任何地方。

补充二:多条匹配执行同一语句

case 本身是用来进行判断的,当一次判断完成后,其他所有的 case 都将失效(相当于被注释掉),所以当我们想要多条 case 执行同一语句时,可以把这些 case 堆叠在一起。

举例

根据输入的数字,判定今天是周内还是周末

int main()
{
	int day = 0;
	while (1)
	{
		printf("Please Enter Your Day# ");
		scanf("%d", &day);
		switch (day) 
		{
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("周内\n");
			break;
		case 6:
		case 7:
			printf("周末\n");
			break;
		default:
			printf("input error\n");
			break;
		}
	}
	return 0;
}

编译运行:
【C语言】switch语句的理解

补充三:在 case 语句中定义变量的问题

下面代码在 case 语句中定义了一个 n 变量

int main()
{
	switch (7)
	{
	case 1:
		int n = 10;
		break;
	default:
		break;
	}
	return 0;
}

编译器会报错:
【C语言】switch语句的理解

如果我们这样写(在变量定义的地方加上"{}"):

int main()
{
	switch (7)
	{
	case 1:
	{int n = 10; }
		break;
	default:
		break;
	}
	return 0;
}

编译器就不会报错,原因如下:

C++编译器考虑了如下的情况:倘若在case 1中定义了一个变量,由于case 1和 default 都在同一个作用域,因此 default 可以调用case 1的变量;如果 default 这样做了,看看会发生什么情况——将会跳过case 1而执行 default,但 default 调用的case 1的变量还没有定义,因此会发生错误!

为了防止这样情况,就需要在case 1中定义变量的部分加上"{}",以限制变量的作用域(防止被 default 调用),从而防止出错。

假设 default 一定要调用case 1中的变量,那就把这个变量定义成全局变量。

三. 几点建议

建议一:按执行频率排列 case 语句

把最常执行的情况放在前面,而把最不常执行的情况放在后面。这样做有两个好处:

  • 最常执行的代码可能也是调试的时候要单步执行最多的代码。如果放在后面的话,找起来可能会比较困难,而放在前面的话,可以很快找到。
  • 程序执行运行起来,匹配的时候可以较少次的匹配。

细节二:简化每种情况对应的操作

写 case 时,建议使得与每种情况相关的代码尽可能的精炼。case 语句后面的代码越精炼,case 语句的结果就会越清晰。试想,如果case语句后面的代码整个屏幕都放不下,这样的代码谁也很难看得清晰吧。如果某个 case 语句确实需要这么多的代码来执行某个操作,那可以把这些操作写成一个或几个函数,然后在 case 语句后面调用这些函数就ok了。一般来说,case语句后面的代码尽量不要超过20行。

细节三:将 default 字句只用于检查真正的默认情况

有时候,你只剩下了最后一种情况需要处理,于是就决定把这种情况用default 子句来处理。这样也许会让你偷懒少敲几个字符,但是这却很不明智。因为这样将失去 case 语句的标号所提供的自说明功能,而且也丧失了使用 default 子句处理错误情况的能力。所以最好老老实实地把每一种情况都用case 语句来完成,而把真正默认情况的处理交给 default 子句。文章来源地址https://www.toymoban.com/news/detail-408871.html

到了这里,关于【C语言】switch语句的理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言——分支语句(if,switch)

    前言:这篇博客,主要想从 理解分支语句,语句的执行过程和书写 以及一些 注意事项 来谈谈 分支语句 🎬 个人简介:努力学习ing 📝 CSDN主页 愚润求学 🌄 每日鸡汤: 我走的很慢,但我从不后退 目录 一,if语句 注意事项 二,switch语句 我们如何理解分支语句是什么? 分

    2024年02月06日
    浏览(56)
  • (上) C语言中的语句分类及分支语句:if语句、switch语句介绍

    目录 前言 一、语句的分类 1. 空语句 2. 表达式语句 3. 函数调用语句 4. 复合语句 5. 控制语句 二、分支语句 1. if语句 (1) if的使用 (2) else的使用 (3) 分支中包含多条语句 (4) 嵌套if (5) 悬空else问题 2. switch语句 (1) if语句和switch语句的对比 (2) switch语句中的break (3) switch语句中的defa

    2024年01月22日
    浏览(67)
  • C语言 switch case 语句优化方案其一

                   这是一个用于计时的函数,细心的朋友应该可以发现,这段代码还隐藏一段 if 语句的优化方案,那就是 提前return,干掉else。                结构体内容如下: 当case语句较少的时候还能接收,假如很多的时候就会难以维护,这里提供一种思维。   

    2024年01月21日
    浏览(46)
  • 九、程序的流程结构(if分支语句,Switch分支,for循环)

    程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构。 顺序结构:从上向下,逐行执行。 选择结构:条件满足,某些代码才会执行。0-1次 ​ 分支语句:if,switch,select 循环结构:条件满足,某些代码会被反复的执行多次。0-N次 ​ 循环语句:for 语法格式: 示

    2024年02月07日
    浏览(37)
  • C 语言中的 switch 语句和 while 循环详解

    替代多重 if..else 语句,可以使用 switch 语句。 switch 语句用于选择多个代码块中的一个来执行 switch 表达式只会被计算一次 表达式的值与每个 case 的值进行比较 如果找到匹配,则执行相应的代码块 break 语句用于跳出 switch 块并停止执行 default 语句是可选的,如果找不到匹配的

    2024年02月04日
    浏览(38)
  • C语言 switch语句详细讲解 简单计算器及PTA例题季节判断,今天星期几-1(switch语句实现), 数据按需处理

    (1) 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到  break  语句为止。 (2)不是每一个 case 都需要包含  break 。如果 case 语句不包含  break ,控制流将会  继续  后续的 case,直到遇到 break 为止。 (3) 上面所有 case 都无法判断结果时,可用 default 代替

    2024年02月05日
    浏览(60)
  • 【C语言步行梯】分支语句if...else、switch详谈

    🎯每日努力一点点,技术进步看得见 🏠专栏介绍:【C语言步行梯】专栏用于介绍C语言相关内容,每篇文章将通过图片+代码片段+网络相关题目的方式编写,欢迎订阅~~ C语言由 ; (分号)隔开的就是一条语句,举个例子↓↓↓ 生活中,我们有很多需要选择的情况。例如:你想

    2024年03月16日
    浏览(60)
  • 看完这篇文章,保你学会C语言switch case 语句

    我的个人主页: ☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主 欢迎各位 👍点赞 ⭐收藏 📝评论 特别标注 :本博主将会长期更新c语言的语法知识,初学c语言的朋友们,可以收藏订阅一下我的专栏: C语言基础语法(超详细)_☆光之梦☆的博客-CSDN博客 (这

    2023年04月26日
    浏览(40)
  • 《C语言初阶》这篇文章带你全面认识switch语句的用法!

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,又是新的一天开始了,今天给大家带来的switch语句的全面讲解!    ⛳️ 预计博主这俩天会把分支语句和循环语句给彻底

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包