【问题:字符解释】
从键盘输入一个字符,当输入的字符为“y”或“n”或“c”时,分别显示“Yes”、“No”、“Cancel”,输入其他字符时显示“Illegal!”。
#include
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;
}
#include
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的基本结构如下:
switch()
{
case :
break;
case :
break;
default:
break;
}
switch()
{
case :
break;
case :
break;
default:
break;
}
【问题:字符解释】
从键盘输入一个字符,当输入的字符为“Y”或“y”、“N"或“n”、"C"或“c”时,也就是说不区分大小写,分别显示“Yes”、“No”、“Cancel”,输入其他字符时显示“Illegal!”。
#include
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;
}
#include
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;
}
上面的代码看着有点重复,能简化一下吗? 当然!
#include
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;
}
#include
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标签必须是常量表达式。
// 2012_03_C_21
#include
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;
}
// 2012_03_C_21
#include
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,