c++ switch语句

switch语句

在说switch语句前,看一个不是很理想的if语句的示例
使用if else 语句打印一位数中文数字:

#include
using namespace std;
//打印一位中文数字

int main()
{
	int num = 6 ;
	if (num == 0){
		cout << "零" << endl;
	}
	else if (num == 1){
		cout << "一" << endl;
	}
	else if (num == 2){
		cout << "二" << endl;
	}
	else if (num == 3){
		cout << "三" << endl;
	}
	else if (num == 4){
		cout << "四" << endl;
	}
	else if (num == 5){
		cout << "五" << endl;
	}
	else if (num == 6){
		cout << "六" << endl;
	}
	else if (num == 7){
		cout << "七" << endl;
	}
	else if (num == 8){
		cout << "八" << endl;
	}
	else if (num == 9){
		cout << "九" << endl;
	}
	else {
		cout << "数字不在0-9范围内!" << endl;
	}
	return 0 ;
}

输出结果为:
在这里插入图片描述例子使用多个else if打印中文数字,这样的写法有些烦恼,也容易出错。对于不同区间的判断,我们可以使用多个if…else语句来实现,但是对于类似枚举值的多个相等判断条件来说,c++提供了一种更合适的语法,也就是switch语句。
使用switch语句打印一位数中文数字:

#include
using namespace std;
//使用switch语句打印一位数中文数字

int main()
{
	int num = 6 ;
	switch (num)
	{
		case 0:
			cout << "零" << endl;
			break;
		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;
		case 6: 
			cout << "六" << endl;
			break;
		case 7: 
			cout << "七" << endl;
			break;
		case 8: 
			cout << "八" << endl;
			break;
		case 9:
			cout << "九" << endl;
			break;
		default :
			cout << "数字不在0-9之间!" << endl;
			break;
	}
	return 0 ;
}

运行结果为:
在这里插入图片描述可以看出,两个程序的运行结果完全相同。
switch语句开头的括号中是一个表达式,而其下面的每个case都是这个表达式可能得到的值,每一个不同的值都会走近一段不同的代码。表达式的值如果没有出现在所有case后面,就会自动落到default(默认)的代码段中。

提示:case后面必须是常量整型(包括字符型和布尔型),如果不是常量整数,编译器编译的时候就无法确定分支的条件,那也就失去了使用switch语句优化的好处(编译器会对switch生成一种跳转表的优化结构)。如果case后面是常量的浮点型也没有什么意义,因为浮点数相等于一个特定值的概率是非常低的,不管他的范围有多小。

## #
需要注意的是,switch语句中的break也很关键,它会让程序跳出整个switch语句块。如果没有break,一个case的代码执行完后会继续执行紧接在case后的代码,这也叫贯穿(Fall-through)。

switch语句的贯穿

#include
using namespace std;
//使用switch语句打印一位数中文数字

int main()
{
	int num = 6 ;
	switch (num)
	{
		case 0:
			cout << "零" << endl;
			break;
		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;
		case 6: 
			cout << "六" << endl;
		case 7: 
			cout << "七" << endl;
			break;
		case 8: 
			cout << "八" << endl;
			break;
		case 9:
			cout << "九" << endl;
			break;
		default :
			cout << "数字不在0-9之间!" << endl;
			break;
	}
	return 0 ;
}

输出结果:
在这里插入图片描述
从输出结果可以看出,这种情况与期望不一致,代码行为与预期出现了偏差。

switch语句贯穿的合理应用:

#include
using namespace std;

//switch语句贯穿的合理应用

int main()
{
	int num = 6 ;
	switch (num)
	{
		case 0:
		case 2:
		case 4:
		case 6:
		case 8:
			cout << "num是偶数!" << endl;
		  break;
		case 1:
		case 3:
		case 5:
		case 7:
		case 9:
			cout << "num是奇数!" << endl;
		  break;
		default :
			cout << "数字不在0-9之间!" << endl;
		  break;
	}

	return 0;
}

运行结果为:
在这里插入图片描述
示例展示了如何利用贯穿的特性使程序变得更灵活,从而实现对一个数奇偶的判断。

此外,default的添加也是值得注意的,因为如果没有把所有可能出现的case都处理好的话,程序可能会出现预期外的行为。

遗漏default:

#include
using namespace std;

//遗失default

int main()
{
	int num = 11 ;
	switch (num)
	{
		case 0:
		case 2:
		case 4:
		case 6:
		case 8:
			cout << "num是偶数!" << endl;
		        break;
		case 1:
		case 3:
		case 5:
		case 7:
		case 9:
			cout << "num是奇数!" << endl;
		        break;
	}

	return 0;
}

示例中遗失了default,这样导致了程序在num= 11,的时候,什么都不会打印,用户将感到十分的困惑。

如果本文对你有帮助请点赞支持一下下~

你可能感兴趣的:(c++,入门大全,c语言,c++)