while循環下的switch...case中的break和continue是怎樣


    /* 4.(****)反復校驗用戶輸入的生日,包括年、月、日。直到年、月、日都合法。
    提示:
        (1)使用while循環實現反復校驗
        (2)使用switch實現校驗
        (3)只有閏年才有2月29日
        (4)1、3、5、7、8、10、12,每個月有31天
        (5)4、6、9、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)
    }

分析:如果輸入的是一個合法的生日,他會利用case中的(1)break跳出switch...case語句,然后再利用后面的代碼(2)break結束整個while循環。(1)break不能直接跳出整個while循環。

        如果是輸入的是一個不合法的生日,他會利用contiue不再之后其后面的所有代碼,switch對continue是透明的,直接進入新一輪的while循環。,
   

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語句中 - 小庄 - 苦海無邊
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM