zoukankan      html  css  js  c++  java
  • C语言基础--switch

    switch格式:

    switch (条件表达式)
     {
        case 整数: // case可以有一个或多个
            语句;
            break;
        case 整数:
             语句;
             break;
        default:
            语句;
            break;
     }

    执行说明:

       1.拿到条件表达式的返回值(注意返回值必须是整型)

       2.利用条件表达式的返回值和switch后面大括号中的每一个case进行比较, 判断条件表达式的返回值和case后面的整数是否相等   条件表达式 == 整数

       3.如果条件表达式的返回值等于某一个case后面的整数, 那么就会执行该case后面的语句

       4.执行完语句之后如果遇到break就会结束整个switch语句, 也就是说后面的所有语句都不会被执行

       5.如果前面的case不满足, 也就是前面的case的整数和条件表达式的返回值不相等就会继续判断后面的case

       6.如果前面所有的case都不满足, 就会执行default后面的语句

     

    使用举例:

      要求用户输入一个分数,根据输入的分数输出对应的等级

         A 90~100

         B 80~89

         C 70~79

         D 60~69

         E 0~59

         // 1.提示用户输入一个分数
        printf("请输入一个0~100的分数, 以回车结束
    ");
    
        // 2.定义变量保持用户输入的分数
        int score = -1;
    
        // 3.接收用户输入的值
        scanf("%i", &score);
    
        //可以对用户输入的数据进行刷选  如 分数小于 0 或 大于 100 怎么怎么样 
    
        // 4.根据用户输入的值输出对应的结果
        switch (score/10) {
            case 10:
                printf("A
    ");
                break; 
            case 9:
                printf("A
    ");
                break;
            case 8:
                printf("B
    ");
                break;
            case 7:
                printf("C
    ");
                break;
            case 6:
                printf("D
    ");
            default:
                printf("E
    ");
                break;
        }
    
     
    View Code

    注意点:

       1.Switch得条件表达式注意点

            Switch的条件表达式必须是返回整数的表达式, 也就是说()中只能放整数

        或者写能够转换为整数的类型也可以, 例如char, 因为char类型可以转换为int类型, 所以写char也可以

        switch ('A') {
            case 6:
                printf("6");
                break;
            case 8:
                printf("8");
                break;
            default:
                printf("other");
                break;
        }

      2.case的取值

        Switch中, case后面只能放返回值是整数的表达式或者整数, 或者能够转换为整数的类型

        case的取值不能重复

        case后面不能放变量, 因为系统在编译的时候会对Switch后面所有的case进行优化, 会根据case后面的常量值, 生成一张取值表 

        int number = 7;
        switch (6) {
            case 3 + 3:
                printf("6");
                break;
            case 'A':
                printf("8");
                break;
            case 65:  // 异常信息  Duplicate case value '65'
                printf("65");
                break;
            case number:// 异常信息 Expression is not an integer constant expression
                printf("8");
                break;
            default:
                printf("other");
                break;
        }

        

      3.default的位置问题

        Switch中的default可以随便放

        无聊default写到什么地方, 它都会最后执行(只有前面所有的case都不满足的情况才会执行)

        只要某一个case满足, 那么后面所有的case和default都会失效  case语句的穿透问题

        同理: 只要default满足, 那么所有的case都会失效

    /*
         结束switch语句:
         1.遇到break
         2.执行到switch对应的大括号的结束 }
    */
        switch (20) {
            default:
                printf("other
    ");
                break;
            case 6:
                printf("6");
                break;
            case 8:
                printf("8");
                break;  
            case 20:
                printf("20");
    // 没有写break  如果switch中有一个case满足了条件, 那么其它所有的case和default都会失效
    即相当于case  default都不存在了  程序一直往下执行 直到遇到break或switch结束大括号}才跳出 
            case 28:
                printf("28");
                break;
        }

    省略break示例:

       

    // 从键盘输入一个月份,输出对应季节 12~2 冬季 3~5 春季 6~ 8 夏季 9~11 秋季
        printf("请输入一个1~12的月份, 以回车结束
    ");
        int number = -1;
        scanf("%i", &number);
        switch (number) {
            case 12:
            case 1:
            case 2:
                printf("冬季");
                break;
            case 3:
            case 4:
            case 5:
                printf("春季");
                break;
            case 6:
            case 7:
            case 8:
                printf("夏季");
                break;
            case 9:
            case 10:
            case 11:
                printf("秋季");
                break;
            default:
                printf("让我凌乱会儿
    ");
                break;
        }

     

  • 相关阅读:
    37 什么时候使用内部临时表
    2 Hadoop集群安装部署准备
    36 为什么临时表可以重名
    maven内置属性
    ProGuard 最全混淆规则说明
    stylus的用法
    vscode 插件 配置
    关于overflow:hidden
    vue-devtools/安装vue-devtools
    对Java中使用两个大括号进行初始化的理解
  • 原文地址:https://www.cnblogs.com/dx-230/p/4753581.html
Copyright © 2011-2022 走看看