while循环下的switch...case中的break和continue是怎样
2015-08-22 16:38 清晨的小树林 阅读(8743) 评论(0) 收藏 举报    /* 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语句中





 
                    
                     
                    
                 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号