什么是switch语句?
在编程中,我们常常需要对某个变量的不同取值进行不同的处理。当我们遇到这种情况时,if-else语句并不总是最好的选择。这时候就可以使用switch语句。switch语句是一种多分支选择结构,通常用于根据不同的条件执行不同的代码块。
switch (expression)
{
case value1:
// 代码块1
break;
case value2:
// 代码块2
break;
...
default:
// 代码块3
}
在上面的代码中,expression是一个变量或表达式,value1、value2等是expression可能的结果,case后面的值必须是常量或字面值。如果expression的值等于某个case后面的值,则执行相应的代码块。如果expression的值与任何一个case后面的值都不相等,且有default分支,则执行default分支中的代码块。如果没有default分支,则不执行任何代码。
case后面的值必须是什么?
case后面的值必须是常量或字面值
在switch语句中,case后面的值必须是常量或字面值。这是因为,在编译时编译器会将case后面的值和expression的值进行匹配。如果case后面的值不是常量或字面值,那么编译器就无法确定这个值是否合法。因此,只有常量或字面值才能作为case后面的值。
在C语言中,case后面的值必须是整型常量表达式,即只能是整数或枚举类型。在C++语言中,case后面的值可以是任何可以转换成整数的表达式,包括整数、枚举、字符和指针等类型。
下面的代码演示了如何在switch语句中使用整数和字符类型的常量:
int num = 2;
char ch = 'A';
switch (num)
{
case 1:
// 代码块1
break;
case 2:
// 代码块2
break;
case 3:
// 代码块3
break;
default:
// 代码块4
}
switch (ch)
{
case 'A':
// 代码块1
break;
case 'B':
// 代码块2
break;
case 'C':
// 代码块3
break;
default:
// 代码块4
}
上面的代码中,num是一个整数变量,ch是一个字符变量。在第一个switch语句中,我们使用num的值作为expression,case后面的值是整数1、2、3,这些值都是整型常量表达式。在第二个switch语句中,我们使用ch的值作为expression,case后面的值是字符'A'、'B'、'C',这些值也都是常量。
case后面的值不能重复
在switch语句中,case后面的值不能重复。这是因为如果有两个或多个case后面的值相同,那么编译器无法确定具体执行哪一个case中的代码块。因此,每个case后面的值必须是唯一的。
下面的代码演示了重复的case值会导致编译错误:
int num = 2;
switch (num)
{
case 1:
// 代码块1
break;
case 2:
// 代码块2
break;
case 2: // 这里重复了值2
// 代码块3
break;
default:
// 代码块4
}
上面的代码中,我们在第三个case后面又加了一个值为2的case。这会导致编译错误,提示“重复的case值”。
case后面的值可以用逗号分隔
在switch语句中,case后面的值可以用逗号分隔。这样可以在一个case中匹配多个值。下面的代码演示了如何在一个case中匹配多个值:
int num = 3;
switch (num)
{
case 1:
// 代码块1
break;
case 2:
case 3:
// 代码块2
break;
default:
// 代码块3
}
上面的代码中,num的值是3。在这个switch语句中,case 2和case 3后面都没有写break语句,这意味着在num等于2或3时都会执行“代码块2”。可以看出,case后面的值可以用逗号分隔,这样就可以在一个case中匹配多个值。
总结
在switch语句中,case后面的值必须是常量或字面值,且不能重复。值必须是整数或枚举类型。C++语言中,case后面的值可以是任何可以转换成整数的表达式,包括整数、枚举、字符和指针等类型。case后面的值可以用逗号分隔,在一个case中匹配多个值。
最后,我们需要注意的是,在使用switch语句时,一定要记得加上break语句,否则会导致程序执行错误。