user-0 提问: 求助

回复:
user: user-1
content: 程序进入了 default 之后，没有遇到 break; 语句，程序就顺序执行后面的语句

user: user-2
content: 引用 10 楼 weixin_45049670 的回复:如果按你说的顺序执行case语句，得到的k依次是5,10,30，最后的结果就是30。可是这题的答案55又是怎么出来的的呢？ case 1: 后面的语句不是有 【break; 】么？ 程序在 switch 里面 执行了 default : 和 break; 之间的两个  printf 就 跳出 switch 结构了啊！  看来你还是没理解上面的解释哦！ 多读几遍，多读几遍，先别着急想题目怎么回答，先把switch-case这个语法了解了再说。 ～

user: user-2
content: 引用 12 楼 weixin_45049670 的回复:可以的老哥。意思是这个55是两次执行printf的结果对吧，每一次都是5。老哥加个QQ呗，说不定还有问题问你  俺不用QQ好多年了！ ：）

user: user-0
content: 引用 5 楼 拥抱Linux的回复:！ （1）default 标签是可选的，可以放在 switch 语句体内任何位置。 如果没有 default 标签，并且没有任何 case 常量符合 switch 语句控制表达式的计算结果，那么 switch 语句体中的语句都不会执行。 在这种情况下，程序流会转而执行 switch 语句体后面的语句。 （2）C 语言的标签只用于标识程序流可能跳转到的目的地。这些标签本身对程序没有影响。因此，从 switch 跳转到第一个符合条件的 case 标签之后，程序会继续顺序执行，不受其他标签的影响。 ——也就是说，像你上面的代码，程序跳转到 default 标签之后，只要没有遇到 break; 语句， 那么后面的任何 case 标签 都不再影响程序的执行了，也就是说，只要没有遇到 break; 语句，后面的所有语句都会被顺序执行。 ——换一种方式来理解也可以： switch-case 结构， swtich后面圆括号里的量 只能够去 寻找 一次、一次、一次  标签 ，它的出发点是 switch ，终点是 符合条件的 case 标签 或者 default 。一旦 它找到了 符合条件的 case 标签 或者 default ， 程序就执行后面的代码。那么，现在 switch后面圆括号里的量 就结束了 它 去寻找 标签的使命了， 那么 只要没有遇到 break; 语句，后面的所有语句都会被顺序执行。 所以，上面的代码，程序进入了 default 之后，因为没有遇到 break; 语句，所以程序就顺序执行后面的语句了，而后面的标签对于程序而言是什么呢？什么都不是，你把那些标签理解成是不影响程序执行的注释都可以。 （3）如果在这个符合条件的 case 标签之后，其他 case 标签中的语句应该被忽略，就应该在所执行的最后一条语句后，加上 break 语句，使得程序流直接跳转到 switch 语句体的后面。 ！ 顺便提一句，C语言的switch-case是这样的语法规定，而其他有一些语言的switch-case与之相反，不需要break;语句就自动从符合条件的标签末尾跳出整个switch结构了，比如golang。 所以，这里的关键还是理解C的switch-case的运作过程，特别是不要认为有多少个case就会比较多少次，像上面的代码，default后面的case 标签都是被无视了的，而语句倒是都要执行。 ～ 如果按你说的顺序执行case语句，得到的k依次是5,10,30，最后的结果就是30。可是这题的答案55又是怎么出来的的呢？

user: user-0
content: 如果按你说的顺序执行case语句，得到的k依次是5,10,30，最后的结果就是30。可是这题的答案55又是怎么出来的的呢？

user: user-0
content: 引用 7 楼 嘟嘟洒水车的回复:default放最前被人看到怕不是要被骂死，这题一股浓浓的a+++++a的感觉。 55这个答案是怎么出来的啊

user: user-0
content: 引用 11 楼 拥抱Linux的回复:[quote=引用 10 楼 weixin_45049670 的回复:] 如果按你说的顺序执行case语句，得到的k依次是5,10,30，最后的结果就是30。可是这题的答案55又是怎么出来的的呢？ case 1: 后面的语句不是有 【break; 】么？ 程序在 switch 里面 执行了 default : 和 break; 之间的两个  printf 就 跳出 switch 结构了啊！  看来你还是没理解上面的解释哦！ 多读几遍，多读几遍，先别着急想题目怎么回答，先把switch-case这个语法了解了再说。 ～[/quote] 可以的老哥。意思是这个55是两次执行printf的结果对吧，每一次都是5。老哥加个QQ呗，说不定还有问题问你

user: user-3
content: default放最前被人看到怕不是要被骂死，这题一股浓浓的a+++++a的感觉。

user: user-0
content: 老哥给力呀，容我看看先，

user: user-2
content: ！ （1）default 标签是可选的，可以放在 switch 语句体内任何位置。 如果没有 default 标签，并且没有任何 case 常量符合 switch 语句控制表达式的计算结果，那么 switch 语句体中的语句都不会执行。 在这种情况下，程序流会转而执行 switch 语句体后面的语句。 （2）C 语言的标签只用于标识程序流可能跳转到的目的地。这些标签本身对程序没有影响。因此，从 switch 跳转到第一个符合条件的 case 标签之后，程序会继续顺序执行，不受其他标签的影响。 ——也就是说，像你上面的代码，程序跳转到 default 标签之后，只要没有遇到 break; 语句， 那么后面的任何 case 标签 都不再影响程序的执行了，也就是说，只要没有遇到 break; 语句，后面的所有语句都会被顺序执行。 ——换一种方式来理解也可以： switch-case 结构， swtich后面圆括号里的量 只能够去 寻找 一次、一次、一次  标签 ，它的出发点是 switch ，终点是 符合条件的 case 标签 或者 default 。一旦 它找到了 符合条件的 case 标签 或者 default ， 程序就执行后面的代码。那么，现在 switch后面圆括号里的量 就结束了 它 去寻找 标签的使命了， 那么 只要没有遇到 break; 语句，后面的所有语句都会被顺序执行。 所以，上面的代码，程序进入了 default 之后，因为没有遇到 break; 语句，所以程序就顺序执行后面的语句了，而后面的标签对于程序而言是什么呢？什么都不是，你把那些标签理解成是不影响程序执行的注释都可以。 （3）如果在这个符合条件的 case 标签之后，其他 case 标签中的语句应该被忽略，就应该在所执行的最后一条语句后，加上 break 语句，使得程序流直接跳转到 switch 语句体的后面。 ！ 顺便提一句，C语言的switch-case是这样的语法规定，而其他有一些语言的switch-case与之相反，不需要break;语句就自动从符合条件的标签末尾跳出整个switch结构了，比如golang。 所以，这里的关键还是理解C的switch-case的运作过程，特别是不要认为有多少个case就会比较多少次，像上面的代码，default后面的case 标签都是被无视了的，而语句倒是都要执行。 ～

user: user-4
content: 引用 3 楼 weixin_45049670 的回复:[quote=引用 1 楼 轻箬笠的回复:]default必须放在最后，否则不会进其他选项 可是书上写的是default如果不放最后是否结束循环取决于default后是否有break呀，而且如果执行case 1，结果是5，答案是55。[/quote] 你default放在最前面，那不管switch的值是多少，都会进default，因为default没有break，所以顺序下来，先找到case 1，因为case 1有break，所以跳出switch。 你可以试试把case 1的break去掉，那样会继续执行case 2的部分，直到结束或者遇到break为止。 所以强调要添加break，不添加的话就按照顺序执行。

user: user-0
content: 引用 1 楼 轻箬笠的回复:default必须放在最后，否则不会进其他选项 可是书上写的是default如果不放最后是否结束循环取决于default后是否有break呀，而且如果执行case 1，结果是5，答案是55。

user: user-4
content: 你这题应该先执行default，然后进入case 1吧，然后case 1的break

user: user-4
content: default必须放在最后，否则不会进其他选项