结果为什么是passwarn?
main()
{
int n='c';
switch(n++)
{
default :printf("error");break;
case 'a':case 'A':case 'b':case 'B':printf("good");break;
case 'c':case 'C':printf("pass");
case 'd':case 'D':printf("warn");
}
getch();
}
麻烦解释一下 问题如题 谢谢
问题点数:10、回复次数:7Top
1 楼tfq(大梦谁先觉)回复于 2005-05-17 22:16:48 得分 0
当前n='c',当然就从case 'c'这行开始执行阿,执行完这行没有break退出,继续往下执行阿。
另外不要把default放在前面,放后面好看些Top
2 楼majiaking3(majiaking3)回复于 2005-05-17 22:41:35 得分 0
那case 'C':case 'd':case 'D':这些还有判断能力吗?
怎么不判断照样可以执行后面的语句呢?Top
3 楼du51(郁郁思扬)回复于 2005-05-17 22:55:49 得分 0
不遇转移语句 一直向下执行.执行的时候跳过判断语句.
这样也有好处.比如说,
switch(c)
{case 'c':case 'C':printf("输出的是c");break;
case 'd':case 'D':printf("输出的是d");break;
..................
}
这样至少不用你一个一个的来.呵呵.Top
4 楼majiaking3(majiaking3)回复于 2005-05-17 23:02:05 得分 0
如果是“不遇转移语句 一直向下执行.执行的时候跳过判断语句.”
case 'a':case 'A':case 'b':case 'B':printf("good");break;
那这里怎么不输出good来?不是执行完输出才break;的吗?Top
5 楼du51(郁郁思扬)回复于 2005-05-17 23:23:38 得分 5
从判断的入口处开始执行.
default是除其他外的条件.Top
6 楼yesiloveyou(下意识的弯了一下腰,TMD,踩狗屎了)回复于 2005-05-17 23:41:42 得分 5
n='c'
直接执行
case 'c':case 'C':printf("pass");
没有break;接下去执行
case 'd':case 'D':printf("warn");
退出;
switch(n)和switch(n++)是一样的///因为是后增运算
还有一个 下面这样写是正确的
case 'a':case 'A':case 'b':case 'B':printf("good");break;
相当于
case 'a':printf("good");break;
case 'A':printf("good");break;
case 'b':printf("good");break;
case 'B':printf("good");break;
Top
7 楼learnerlzh()回复于 2005-05-18 00:37:17 得分 0
这个真是高手如去,我真是学到也啊,Top




