目录
一、switch语句
语法
执行过程?
流程图?
示例?
运行效果
温馨提示
一、switch语句
一个?switch?语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个?switch case?进行检查
语法
C 语言中?switch?语句的语法:
switch(expression){
case constant-expression :
statement(s);
break; /* 可选的 */
case constant-expression :
statement(s);
break; /* 可选的 */
/* 您可以有任意数量的 case 语句 */
default : /* 可选的 */
statement(s);
}
switch?语句必须遵循下面的规则:
- switch?语句中的?expression?是一个常量表达式,必须是一个整型或枚举类型
- 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号
- case 的?constant-expression?必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量
- 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到?break?语句为止
- 当遇到?break?语句时,switch 终止,控制流将跳转到 switch 语句后的下一行
- 不是每一个 case 都需要包含?break。如果 case 语句不包含?break,控制流将会?继续?后续的 case,直到遇到 break 为止
- 一个?switch?语句可以有一个可选的?default?case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的?break?语句不是必需的
执行过程?
它的执行过程是:
- 首先计算表达式的值,假设为value
- 从第一个case开始,比较value?和整型数值1,如果它们相等,就执行冒号后面的所有语句,也就是从语句1一直执行到语句n+1,而不管后面的case是否匹配成功
- 如果value?和整型数值1不相等,就跳过冒号后面的语句1,继续比较第二个case、第三个case……一旦发现和某个整型数值相等了,就会执行后面所有的语句。假设?value和整型数值5相等,那么就会从语句5一直执行到语句n+1
- 如果直到最后一个整型数值n都没有找到相等的值,那么就执行default后的语句 n+1
- 需要重点强调的是,当和某个整型数值匹配成功后,会执行该分支以及后面所有分支的语句
流程图?
示例?
test19.c
#include <stdio.h>
int main()
{
int day=0; // 定义一个整数变量用于接受键盘输入的数字
printf("请输入0-6之间的数字:"); // 提示用户输入
scanf("%d",&day); // 接受用户从键盘输入的数据
switch (day)
{
case 0:
printf("星期天\n");
break;
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;
default:
printf("输入错误。\n");
}
}
运行效果
温馨提示
??switch?(result)
??{
????case?10:??printf("...");?break;????//?正确,整数
????case?1+1:??printf("...");?break;????//?正确,表达式1+1==17是整数
????case?'5':??printf("...");?break;????//?正确,字符可以转换为整数
????case?'A':??printf("...");?break;????//?正确,字符可以转换为整数
????case?'A'+10:??printf("...");?break;????//?正确,字符可以转换为整数
????case?3.14:??printf("...");?break;????//?错误,不能为小数
????case?ii:??printf("...");?break;????//?错误,不能采用变量
??}
- case后面必须是整数和字符,或者是结果为整数和字符的表达式,但不能包含任何变量。请看下面的例子
- default不是必须的。当没有 default时,如果所有case都匹配失败,那么就什么都不执行
?
?
|