switch(表达式)
{
case 常量表达式1:
case 常量表达式2:
case 常量表达式3: 语句序列1;
case 常量表达式4: 语句序列2;
case 常量表达式5: 语句序列3;
break;
default: 语句序列n+1
}
先阐述学生的理解和疑问: 第一项的switch(表达式)表达式可以是一个变量常量或者是一段符合C语言的公式,有了这个就可以判断对应这个“表达式”下面的值,是否符合自己要判断的。 switch下面的大括号就不用学生表达了。case 常量表达式1和case 常量表达式2,为空,只有case 常量表达式3为语句序列1,书本的描述是: 如果switch表达式的多个值需要仔细相同的语句,可以用下面的语句格式,也就是case 常量表达式1到case 常量表达式3,我的理解是判断case 常量表达式1成立时,执行语句序列1,case 常量表达式2成立时,执行语句序列1,case 常量表达式3成立时,也执行语句序列1,学生第一个疑问产生了:如果说case 常量表达式1成立执行语句序列1,执行完后是跳case 常量表达式4,还是说跳到case 常量表达式2,依次继续判断???
break这个我知道,但执行到这个就跳出switch语句
defaultt 这个不是很了解,书面描述是就是当case都不满足时,程序会执行default中的语句,如果把case 常量表达式5 下面的break给default这后面,公式的意思应该是上面的case都不成立时执行default后面的语句,既然是break就是跳出了。这时第二个疑问产生了:default后面的语句序列n+1是什么意思 ,执行上面的语句序列,这个+1是什么意思呢?
十分感谢这个老师,原来case就类似goto的关系,我想详细问下case1,2都为空,只有3处有那个语句序列1,是不是无论1,或者2匹配,都会依次往下执行,而不是执行了语句序列1 就跳到了case4往后面执行。default就是上面都不符合,自己添加一条类似else的语句结束一样的吧,感觉default不是很重要,有些例子甚至没有这个出现,这样对吗老师
追答理解的不是怎么正确哦,case 1,2,3,说白了就是GOTO到同一个地址而已。后面的事就完全一样了。“语句序列1;”执行完了就执行“语句序列2;”,这里没有什么跳到不跳到,本来代码就是放在一起的。我说过了,case 其实全部被提前到外面判断了,里面的代码全是放在一起的。