C语言问题输入年份和月份输出该年月的天数,求大神帮我看下哪里错了

#include "stdafx.h"
int main(int argc, char* argv[])
{
int year,month,day;
scanf("%d%d",&year,&month);
if((year%400==0 )||(year%4==0) &&(year%100!=0))
switch(month)

{
case1:
case3:
case5:
case7:
case8:
case10:
case12:day=31;break;
case2:day=29;break;
case4:
case6:
case9:
case11:day=30;break;
printf("%d",day);

}

else if
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:day=31;break;
case2:day=28;break;
case4:
case6:
case9:
case11:day=30;break;

default:printf("error");

printf("%d",day);
}

return 0;
}

没什么大问题

else if改成else

然后在每个case之后加一个空格就好了 

还有在else里面还需要加一个switch

另外程序写的比较啰嗦 åŠŸèƒ½ä¸Šè¿˜æ˜¯æ²¡é—®é¢˜çš„

在你基础上改的

#include "stdafx.h"
int main(int argc, char* argv[])
{  
 int year,month,day;
 scanf("%d%d",&year,&month);
    if((year%400==0 )||(year%4==0&&year%100!=0))
      switch(month)
 
 {    
         case 1: 
         case 3:
         case 5:
         case 7:
         case 8:
         case 10:
         case 12:day=31;break;
         case 2:day=29;break;
         case 4:
         case 6:
         case 9:
         case 11:day=30;break;
       printf("%d",day); 
 
 }   
   
  else
  {  
      switch(month)
      {
      case 1: 
         case 3:
         case 5:
         case 7:
         case 8:
         case 10:
         case 12:day=31;break;
         case 2:day=28;break;
         case 4:
         case 6:
         case 9:
         case 11:day=30;break; 
 
         default:printf("error");
       }
       printf("%d",day);
}

return 0;
}

 ç®€å•ä¼˜åŒ–一下

#include "stdafx.h"
int main(int argc, char* argv[])
{  
 int year,month,day;
 scanf("%d%d",&year,&month);
      switch(month)
 
 {    
         case 1: 
         case 3:
         case 5:
         case 7:
         case 8:
         case 10:
         case 12:day=31;break;
         case 2:
if((year%400==0 )||(year%4==0&&year%100!=0))
  day=29;
else day = 28;
break;
         case 4:
         case 6:
         case 9:
         case 11:day=30;break;
       printf("%d",day); 
 
 }   
   

       printf("%d",day);
}

return 0;
}追问

后面你写重了还有前面我也掉了default 你们都看出来

追答

default不是必须的 只是容错 没有影响不大

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-09
你的逻辑严重错误,每月天数放在数组中。晚上给你代码
第2个回答  2015-04-09
试一试下面程序

#include "stdafx.h"
int main(int argc, char* argv[])
{
int year,month,day;
scanf("%d%d",&year,&month);
if((year%400==0 )||(year%4==0) &&(year%100!=0))
{
switch(month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:day=31;break;
case2:day=29;break;
case4:
case6:
case9:
case11:day=30;break;
}
printf("%d",day);
}
else if
{
switch(month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:day=31;break;
case2:day=28;break;
case4:
case6:
case9:
case11:day=30;break;
}
printf("%d",day);
}
return 0;
}追问

第一个switch语句最后面应该加上default才对吧, 如果大于12就输入error

第3个回答  2015-04-09
case后面没空格,printf不要写在switch语句里面,写在最后,else if不要加上if,用else就行了,else后面直接再用switch语句,还有switch语句没有default
第4个回答  2015-04-09
你把year%100!=0改成year%100==0试试追问

这个没错吧,闰年的条件

追答

你试试啊,按理说应该是这样写的你前边year%4==0和后边的保持一致

追问

不是,闰年的条件是对的

追答

你的运行结果我看看,只是看代码看不出来

相似回答