C++语言中关于switch的用法

关于switch的用法

在一些程序编写中绝对少不了判断语句。
如下面这个用if的简单的判断结构:

#include<iostream>
using namespace std;

int main() {

	int a = 2, b = 3,sum;
	sum = a + b;
	if (sum=4)
	{
		cout << "等于4" << endl;
	}
	else if (sum=5)
	{
		cout << "等于5" << endl;
	}
	return 0;
}

但是这种if的判断语句存在着极大地弊病,就是在每次判断中都要计算一次表达式sum是否等于4或者5,而且表达式 a+b 的结果为一个值,而非一个范围,所以C++就有了switch来解决这种弊病。
用switch改进后的语句如下面:

#include<iostream>
using namespace std;

int main() {
	int a = 2, b = 3,sum;
	sum = a + b;
	switch (sum)
	{
	case 4:
		cout << "等于4" << endl; 
		break;
	case 5:
		cout << "等于5" << endl;
		break;
	default:
		break;
	}
	return 0;
}

在经过switch改进后,明显简洁很多,当然在这种及其简单的例子中也行很难体现其最大的优点,但是在日后的程序编写中switch对于程序的可读性和优化等是有一定的帮助的,所以了解和认识switch是一个程序员必备的。
接下来是switch的格式:

  1. switch后面必须有()和{};
  2. 在()中是需要判断的语句和变量(例如上面是判断sum变量的值);
  3. 在{}中是switch核心程序块,用于判断处理;
  4. 在{}中就是使用case关键字来判断;
  5. case后面跟的必须是常量表达式(包括字符表达式)(格式如:case 1:语句;[break;]),表达式可以是C++任何的合法语句,但是其值只能是字符型常量或者整型常量,该常量表达式是用来判断()里面的表达式的值是否与该常量表达式的值相等;
  6. 每个分支case的常量表达式的值必须与某一值严格相等;
  7. case 常量表达式: 其冒号‘:’后面就是判断为True后所要执行的语句,而且最容易让新学者犯错的是,在执行语句后没有加 break 这样可能会导致的错误的结果,如果没有加break的话会继续执行下去,甚至会把其他case后面的语句也执行了,这个结果会在后面讲;
  8. 所有的case 后面可以加上“ default:语句块;break; ” 而且default可以加也可以不加;
  9. 注意 case 后面的 常量表达式的值都是不能相等的;(若判断的值范围较大,则显然是用if语句优于switch语句。)
  10. 在判断过程中发现每个分支case的常量表达式都不符合,则如果有default语句到时候就会执行default语句后面的的语句,如果default没有,则什么也不执行;
  11. 而且,若switch的某一分支的语句不止一句,则所要求的的多条语句也不用写成语句块的形式,只需在最后的语句后面加上break;即可表示在此case的执行语句结束;

switch的格式示意(其中的[]括起来的表示可以加也可以不加):

#include<iostream>
using namespace std;

int main() {

	switch (表达式)
	{
	case 常量表达式1: [语句块1] [break; ]
	case 常量表达式2: [语句块2] [break;]
	case 常量表达式3: [语句块3] [break;]
		.
		.
		.
	case 常量表达式n: [语句块n] [break;]
	[default:语句块n + 1;[ break;] ]
	}
	return 0;
}

在这里讲一下,如果在case中的语句最后不加break可能发生的不好结果:

#include<iostream>
using namespace std;

int main() {
	int a = 1;
	switch (a)
	{
	case 1: cout << 1 << endl; 
	case 2:  cout << 2 << endl; break;
	case 3: cout << 3 << endl; 

	}
	return 0;
}

在其中的一个分支 case 1:和case 2:的最后没有加break。
执行结果:
执行结果该结果表明:在 case 1: 的执行语句后面没加 break; 的时候,程序不会跳出switch而继续判断下去,使得 case 2: 后面的执行语句也会被执行,知道碰到 break; 才停止,所以只输出了 1 和 2 ,而没有输出 3。
在初学者刚学switch的时候有可能会有这种错误,所以在编写程序的时候一定要考虑break;的重要性。

如果能善于运用bool(布尔)类型的True(1)和Flase(0)也可以用来判断一个范围的值,而不是一个严格的值。
///*********************************************************************///
如我用switch语句实现学生成绩百分制转换成五级记分制:

#include<iostream>
using namespace std;

int main() {
	
	int x, p;
	cin >> x;
	p = 1 * (x < 60) + 2 * (x >= 60 && x < 70) + 3 * (x >= 70 && x < 80) + 4 * (x >= 80 && x < 90) + 5 * (x >= 90);
	switch (p)
	{
	case 1:cout << "不及格" << endl; break;
	case 2:cout << "及格" << endl; break;
	case 3:cout << "中等" << endl; break;
	case 4:cout << "良好" << endl; break;
	case 5:cout << "优秀" << endl; break;

	default:
		break;
	}
	
	
}

关键的语句是“p = 1 * (x < 60) + 2 * (x >= 60 && x < 70) + 3 * (x >= 70 && x < 80) + 4 * (x >= 80 && x < 90) + 5 * (x >= 90);”,这是把范围转换为一个严格值的关键,在()里面表达式的值满足bool值为true时,也就是等于1了,而其bool值为false是,也就是等于0了,当然上面范围需是没有交集的,这样才能保证范围转换为一个严格的值时的准确,在准确转化完成后,其余步骤就和正常使用switch那样了。
(如有异议欢迎在评论中提出。)

### C++ 中 `switch` 语句的用法C++ 编程语言中,`switch` 语句是一种多分支选择结构,用于根据某个表达式的值执行不同的代码块。相比于使用多个嵌套的 `if-else` 结构,`switch` 提供了一种更简洁的方式来进行条件判断。 #### 基本语法 以下是 `switch` 语句的标准形式: ```cpp switch (expression) { case constant1: // 当 expression 的值等于 constant1 时执行的代码 break; case constant2: // 当 expression 的值等于 constant2 时执行的代码 break; default: // 如果没有任何匹配项,则执行此部分代码 } ``` - **`expression`**: 这是一个整数类型的表达式(可以是 `int`, `char` 或者枚举类型)。如果表达式的值与某一个 `case` 后面的常量相等,则会执行该 `case` 下的代码。 - **`break`**: 使用 `break` 关键字来终止当前 `case` 并跳出整个 `switch` 语句。如果没有 `break`,程序将继续执行下一个 `case` 的代码,这被称为“贯穿”行为。 - **`default`**: 可选的部分,当所有的 `case` 都不满足时,默认情况下执行这部分代码。 #### 示例代码 下面展示了一个简单的例子,说明如何利用 `switch` 来实现不同情况下的操作: ```cpp #include <iostream> using namespace std; int main() { int option; cout << "Enter an integer between 1 and 3: "; cin >> option; switch(option) { case 1: cout << "You selected Option One." << endl; break; case 2: cout << "You selected Option Two." << endl; break; case 3: cout << "You selected Option Three." << endl; break; default: cout << "Invalid selection!" << endl; } return 0; } ``` 在这个例子中,用户输入一个数字,然后通过 `switch` 判断这个数字对应的选项并打印相应的消息[^1]。 #### 注意事项 1. 表达式的求值顺序遵循 C++17 新规,在某些复杂场景下可能影响性能优化[^3]。 2. 虽然 `switch` 支持多种数据类型作为其测试表达式的一部分,但它主要适用于离散数值的情况。对于连续范围或者布尔逻辑,通常推荐使用 `if-else` 构造[^2]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立乱来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值