while循环下的switch...case中的break和continue是怎样

    /* 4.(****)反复校验用户输入的生日,包括年、月、日。直到年、月、日都合法。
    提示:
        (1)使用while循环实现反复校验
        (2)使用switch实现校验
        (3)只有闰年才有2月29日
        (4)一、三、五、七、八、十、12,每月有31天
        (5)四、六、九、11,每月有30天
     */
    // 当时不会作
    int year = 0,month = 0,day = 0;
    //while的条件表达式使用YES,用于一直循环
    while (YES) {
        printf("请输入生日(包含年月日):");
        scanf("%d %d %d",&year,&month,&day);
        
        int daysForFeb = 28;
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            daysForFeb = 29;
        }
        
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12: {
                
                if (day >= 1 && day <= 31) {
                    printf("%d-%d-%d是一个合法的生日\n",year,month,day);
                }else{
                    printf("%d-%d-%d不是一个合法的生日,请从新输入生日\n",year,month,day);
                    continue;
                }
                break; // (1)
            }
            case 2: {
                if (day >= 1 && day <= daysForFeb) {
                    printf("%d-%d-%d是一个合法的生日\n",year,month,day);
                }else{
                    printf("%d-%d-%d不是一个合法的生日,请从新输入生日\n",year,month,day);
                    continue;
                }
                break;// (1)
            }
            case 4:
            case 6:
            case 9:
            case 11: {
                if (day >= 1 && day <= 30) {
                    printf("%d-%d-%d是一个合法的生日\n",year,month,day);
                }else{
                    printf("%d-%d-%d不是一个合法的生日,请从新输入生日\n",year,month,day);
                    continue;
                }
                break;// (1)
            }
            default: {
                printf("%d-%d-%d不是一个合法的生日,请从新输入生日\n",year,month,day);
                continue;
                break;// (1)
            }
        }
        
        // 结束循环
        break;//(2)
    }spa

分析:若是输入的是一个合法的生日,他会利用case中的(1)break跳出switch...case语句,而后再利用后面的代码(2)break结束整个while循环。(1)break不能直接跳出整个while循环。blog

        若是是输入的是一个不合法的生日,他会利用contiue再也不以后其后面的全部代码,switch对continue是透明的,直接进入新一轮的while循环。,
   it

continue-break出如今循环中的switch语句中  

如下代码为参考代码例子:
continue-break出如今循环中的switch语句中 - 小庄 - 苦海无边
 经过单步执行得出如下结论:
1.continue出如今for循环中的switch语句中,switch对continue是透明的,这时直接从continue出现的地方结束本次for循环,从新开始下一轮循环。
2.break出如今for循环中的switch语句中,这时break从switch语句中跳出,进入下一轮for循环,而不是结束整个for循环。能够这样理解:把switch语句当作是循环或者是将循环看作是switch语句,而break跳出的每每是最近的那层循环或者switch语句。
 
扩展:当case语句中出现if判断语句,case语句末出现break且if语句中也出现break语句,那么当执行到if语句中的break语句时,那么将直接跳出switch语句,case语句中出如今if语句后面的代码将不会被执行。
以下代码例子:
continue-break出如今循环中的switch语句中 - 小庄 - 苦海无边
continue-break出如今循环中的switch语句中 - 小庄 - 苦海无边
 因为case语句中出现if,且if语句中出现break,因此当执行到if语句时直接跳出switch语句,后面的输出再也不执行。
 
没有if语句的代码及输出以下:
continue-break出如今循环中的switch语句中 - 小庄 - 苦海无边
continue-break出如今循环中的switch语句中 - 小庄 - 苦海无边
 
 
 
相关文章
相关标签/搜索