/* 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