请问我这个判断哪一年那一个月有几天的代码,如果不在case后加break,为什么输入2004 2,会出现2月是30天的情况呢
#includeh>
int main()
{
int year,mouth,day,i;
i=(year%4==0&&year%100!=0)||(year%400==0);
printf("输入年和月\n");
scanf("%d%d",&year,&mouth);
if(year<0||mouth<0||mouth>12)
{
printf("输入有误\n");
}
switch(mouth)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day=31;
case 2:day=28+i;
case 4:
case 6:
case 9:
case 11:day=30;
}
printf("%d年%d月一共有%d天\n",year,mouth,day);
return 0;
}
没有break的话,代码会从匹配的case语句开始一直往下运行,直到所有case都执行完
不加break会穿越到下面的case
1 3 5 7 8 10 12,这里你期望它穿越,不必每个都写了
但是12和2之间,你不能穿越,否则12那个会继续执行下面的,不再是31了
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
有时候我们的需求变了:
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}
return 0;
}
编程好习惯