- 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
- 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
- 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。也就是不再执行switch语句。
- 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
- 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 中的 break 语句不是必需的。default case语句的作用就是判断除了上述的case情况之外的其他情况。
#include<stdio.h> int main() { int data; printf("请输入一个数:"); scanf("%d",&data); switch(data){ case 1: puts("满足条件1的情况"); break; case 2: puts("满足条件2的情况"); break; case 3: puts("满足条件3的情况"); break; default: puts("其他情况"); } return 0; }
该代码中需要注意的有:
1:switch()括号里面必须写有变量
2:case 1:case后面加所属情况注意用空格隔开,之后加冒号:
3:default后面加冒号:
#include<stdio.h>
int main()
{
int data;
printf("请输入一个数:");
scanf("%d",&data);
switch(data){
case 1:
puts("满足条件1的情况");
case 2:
puts("满足条件2的情况");
break;
case 3:
puts("满足条件3的情况");
break;
default:
puts("其他情况");
}
return 0;
}
该代码情况一之间并没有使用break,所以当输入的数字是1的时候,代码运行的结果是
满足条件1的情况
满足条件2的情况
所以为了实现这种情况,改进后的代码是:
switch(data){
case 1:
case 2:
puts("满足条件1和2的情况");
break;
这样无论是输入1还是2,代码运行的结果都是:
满足条件1和2的情况
上述情况均是变量data为整型数据的时候,那么data的类型能不能是字符型呢
看代码:
#include<stdio.h>
int main()
{
char cdata;
printf("请输入一个字符:");
scanf("%c",&cdata);
switch(cdata){
case 'a':
puts("满足条件a的情况");
case 'b':
puts("满足条件b的情况");
break;
case 'c':
puts("满足条件c的情况");
break;
default:
puts("其他情况");
}
return 0;
}
在上述代码中,不同于整型变量的是,变量的类型变成了字符型,与之相关联的case后面的所属情况也要相应的变成字符,但是虽然表面看起来是用字符表示所属情况,但是最终编译器使用的是ascii码值来进行相应的操作。所以本质上还是和整型数据是一样的。
同样: 情况a的后面要是去掉break的话,输入a或者b,代码运行的结果是:
满足条件a和条件b的情况
将整型变量和字符变量结合在一起会是什么样子呢:
看代码:
#include<stdio.h>
int main()
{
char cdata;
int data;
printf("请输入一个字符:");
scanf("%c",&cdata);
switch(cdata){
case 'a':
puts("满足条件a的情况");
break;
case 'b':
puts("满足条件b的情况");
break;
default:
puts("其他情况");
}
printf("请输入一个数:");
scanf("%d",&data);
switch(data){
case 1:
puts("满足条件1的情况");
break;
case 2:
puts("满足条件2的情况");
break;
default:
puts("其他情况");
}
return 0;
}
此时,代码运行的结果是:
请输入一个字符:a
满足条件a的情况
请输入一个数:1
满足条件1的情况
但是如果将整型和字符型的代码顺序调换一下,却出现了问题:
代码如下:
#include<stdio.h>
int main()
{
char cdata;
int data;
printf("请输入一个数:");
scanf("%d",&data);
switch(data){
case 1:
puts("满足条件1的情况");
break;
case 2:
puts("满足条件2的情况");
break;
default:
puts("其他情况");
}
printf("请输入一个字符:");
scanf("%c",&cdata);
switch(cdata){
case 'a':
puts("满足条件a的情况");
break;
case 'b':
puts("满足条件b的情况");
break;
default:
puts("其他情况");
}
return 0;
}
但提醒输入数字的时候,整型数据的判断是正确的,但是到了下面的字符型时却是直接跳过:
结果如下:
请输入一个数:1
满足条件1的情况
请输入一个字符:其他情况
字符的判断直接显示其他情况。
出现上述情况的原因是:整型数据在提醒输入的时候,scanf之后的回车没有被接收,导致到了字符型的时候,回车被当作一个字符接收,转换成ascii码后与所存情况进行判断,最后得出其他情况的结果。解决方法就是键入getchar()吸收掉回车键。
即:
printf("请输入一个字符:");
getchar();
scanf("%c",&cdata);
这样一改之后运行结果就正常了。
但是为什么调换顺序之前不用getchar也能正常运行呢!!!
本文含有隐藏内容,请 开通VIP 后查看