C语言输入年份月份,输出天数。

#include<stdio.h>
void main()
{
int year,month,leap;
scanf("%d%d",year,month);
if(year%400==0)
leap=1;
else
{
if(year%4==0&&year%100!=0)
leap=1;
else leap=0;
}
switch(month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:printf("%d年的d%月的天数为31",year,month);break;
case4:
case6:
case9:
case11:printf("%d年的d%月的天数为30",year,month);break;
case2:if(leap==1)
printf("%d年的d%月的天数为29",year,month);
else printf("%d年的d%月的天数为28",year,month);break;
default:printf("月份错误");
}
}麻烦帮我检查检查哪里错了

scanf("%d%d",year,month);错了

应该是:
scanf("%d%d",&year,&month);
还有啊:case后面有空格的,是case 1,不是case1。

switch...case在执行时具有贯穿性,会从第一个匹配的项开始一路向下执行,知道遇见break或语句块结束符,如
case 1: //do A 执行完do A后继续执行下一条case(do B)
case 2: //do B 执行完do B后继续执行下一条case(do C)
case 3: //do C 执行完do C后遇到break;直接跳出switch...case语句块
break;
case 4: ...
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-06
switch 不能这样用的
switch(month)
{
case1:printf("%d年的d%月的天数为31",year,month);break;
case3:printf("%d年的d%月的天数为31",year,month);break;
case5:printf("%d年的d%月的天数为31",year,month);break;
case7:printf("%d年的d%月的天数为31",year,month);break;
case8:printf("%d年的d%月的天数为31",year,month);break;
case10:printf("%d年的d%月的天数为31",year,month);break;
case12:printf("%d年的d%月的天数为31",year,month);break;
case4::printf("%d年的d%月的天数为30",year,month);break;
case6::printf("%d年的d%月的天数为30",year,month);break;
case9::printf("%d年的d%月的天数为30",year,month);break;
case11:printf("%d年的d%月的天数为30",year,month);break;
case2:if(leap==1)
printf("%d年的d%月的天数为29",year,month);
else printf("%d年的d%月的天数为28",year,month);break;
default:printf("月份错误");
}

只能这样了按你的想法追问

    上次按老师讲的case后面输出的结果相同多个case就可以共用一个输出结果,愁死我了,这道题做了老长时间了

追答

看起来想法很不错,但是这样绝对不行的,走不到12怎么输出31天的结果呢?

追问

case1 3 5 7 8 12输出结果都为31,就让他们共用31,

第2个回答  2012-10-06
case 2 的 if 后面不要 break 吗?追问

其实我不太明白break的含义啊

相似回答