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語句中 - 小莊 - 苦海無邊
 
 
 
相關文章
相關標籤/搜索