zoukankan      html  css  js  c++  java
  • switch语句中default用法详解

    当年学C语言switch开关语句的时候,很多人会告诉你它是这么用的:

    1. switch(表达式){
    2. case常量表达式1: 语句1;break;
    3. case常量表达式2: 语句2;break;
    4. case常量表达式n: 语句n;break;
    5. default: 语句n+1;break;
    6. 其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

    很多人当时都是这么理解的吧。

    好,我们来看这样一个程序

    1. #include <stdio.h>
    2. int main()
    3. {
    4. int c= 0, k;
    5. for (k = 1; k < 3; k++)
    6. switch (k)
    7. {
    8. default:c += k;
    9. case 2:
    10. c++; break;
    11. case 4:
    12. c += 2; break;
    13. }
    14. printf("%d",c);
    15. return 0;
    16. }
    你觉得答案会是多少?

    答案是3。

    分析一下这个题目,首先看上去第一眼就很怪,怎么把default放在第一句了。那么程序是怎么执行的呢?

    当k=1的时候,c+=k ——>c=1 这个时候要注意了,default后面并没有break,所以并不会跳出去,会执行case2,c++

    ——>c=2,遇到break,跳出。

    当k=2的时候,执行case2 ,c++——>c=3;遇到break,跳出。

    所以这里总结一下default的用法:

    如果default语句在所有case最后,此时可以不加break 如果default语句之后还有case语句,如果不加break,则default语句执行过之后会继续下面的case语句,此时必须要在default之后加break语句,不过这种default用法是不推荐的,default顾名思义是缺省情况,只有任何条件都不匹配的情况下才会执行,所以应该将default语句放在所有case结束之后




  • 相关阅读:
    [模板] 多项式全家桶
    [模板] 最大流和费用流分别的两种做法
    [模板] Miller_Rabin和Pollard_Rho
    [模板] 半平面交
    hdu4624 Endless Spin (min-max容斥+dp)
    luogu5193 炸弹 (扫描线)
    luogu4055 游戏 (二分图博弈)
    [模板]后缀自动机
    [模板]fhqTreap
    loj2977 巧克力 (斯坦纳树+随机化)
  • 原文地址:https://www.cnblogs.com/jpfss/p/9830376.html
Copyright © 2011-2022 走看看