【问题:字符解释】
从键盘输入一个字符,当输入的字符为“y”或“n”或“c”时,分别显示“Yes”、“No”、“Cancel”,输入其他字符时显示“Illegal!”。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <stdio.h> int main(int argc, char *argv[]) { char c=getchar(); switch(c) { case 'y': printf("Yes\n"); break; case 'n': printf("No\n"); break; case 'c': printf("Cancel\n"); break; default: printf("Illegal!\n"); break; } return 0; } |
switch-case-break的基本结构如下:
1 2 3 4 5 6 7 8 9 | switch() { case : break; case : break; default: break; } |
【问题:字符解释】
从键盘输入一个字符,当输入的字符为“Y”或“y”、“N"或“n”、"C"或“c”时,也就是说不区分大小写,分别显示“Yes”、“No”、“Cancel”,输入其他字符时显示“Illegal!”。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <stdio.h> int main(int argc, char *argv[]) { char c=getchar(); switch(c) { case 'y': printf("Yes\n"); break; case 'Y': printf("Yes\n"); break; case 'n': printf("No\n"); break; case 'N': printf("No\n"); break; case 'c': printf("Cancel\n"); break; case 'C': printf("Cancel\n"); break; default: printf("Illegal!\n"); break; } return 0; } |
上面的代码看着有点重复,能简化一下吗? 当然!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> int main(int argc, char *argv[]) { char c=getchar(); switch(c) { case 'y': case 'Y': printf("Yes\n"); break; case 'n': case 'N': printf("No\n"); break; case 'c': case 'C': printf("Cancel\n"); break; default: printf("Illegal!\n"); break; } return 0; } |
这里应用了switch-case中的穿透,意思是当跳转到相应的分支后,只要没遇到break,就一直往下执行!
在本例中,如果输入字符 n,这个分支什么都没做,由于没有break,就继续执行,所以无论输入n还是N,执行的语句是一样的。
switch考查两点
所写的任何switch语句都必须遵循以下规则:只能针对基本数据类型使用switch,这些类型包括int、char等; case标签必须是常量表达式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // 2012_03_C_21 #include <stdio.h> int main() { int s=0,n; for(n=0; n<3; n++) { switch(s) { case 0: case 1: s+=1; case 2: s+=2; break; case 3: s+=3; default: s+=4; } printf("%d,",s); } return 0; } |
输出:3,10,14,