#include <stdio.h>
void main()
{
int y,m,d;
int sum=0;
int flog;//标识是否是闰年
int flog2=1;//标识是否是合法月份
printf("请输入年月日(yyyy-mm-dd)\n");
scanf("%4d-%2d-%2d",&y,&m,&d);
switch (m-1)
{
case 12: sum+=31;
case 11: sum+=30;
case 10: sum+=31;
case 9: sum+=30;
case 8: sum+=31;
case 7: sum+=31;
case 6: sum+=30;
case 5: sum+=31;
case 4: sum+=30;
case 3: sum+=31;
case 2: sum+=29;
case 1: sum+=31;
default:printf("非法月份\n");
flog2=0;
break;
}
sum=sum+d;
if(( y%4==0 && y%100!=0 ) || y%400==0)
flog=1;
else
flog=0;
if (d>0&&d<=31)
{
if(flog==1)
printf("这一天是这年的第%d天",sum-flog);
if(flog==0)
printf("这一天是这年的第%d天",sum);
}
else
printf("非法日期\n");
}
我哪里有错误了??为什么输入非法月份后不会停止,
例如输入:2013-13-01,
这输出:非法月份
这是今年的第367天
输入:2013-03-32
则输出:非法月份
非法日期
如何改进呢??
#include <stdio.h>
void main()
{
int y,m,d;
int sum=0;
int flog;//标识是否是闰年
int flog2=1;//标识是否是合法月份
printf("请输入年月日(yyyy-mm-dd)\n");
scanf("%4d-%2d-%2d",&y,&m,&d);
switch (m-1)
{
case 11: sum+=30;//case12这句不要。因为swich是计算某月之前的月数有多少天,再加上该月的第几天
case 10: sum+=31;
case 9: sum+=30;
case 8: sum+=31;
case 7: sum+=31;
case 6: sum+=30;
case 5: sum+=31;
case 4: sum+=30;
case 3: sum+=31;
case 2: sum+=29;
case 1: sum+=31;
break;//这里要改
default:
{
printf("非法月份\n");
flog2=0;
}
break;
}
if(flog2==1)//这里改一下
{
sum=sum+d;
if(( y%4==0 && y%100!=0 ) || y%400==0)
flog=1;
else
flog=0;
if (d>0&&d<=31)
{
if(flog==1)
printf("这一天是这年的第%d天",sum-flog);
if(flog==0)
printf("这一天是这年的第%d天",sum);
}
else
printf("非法日期\n");
}
}
还有很多需要改进啊
1.判非法日期不完善 距离 难道2013-4-31合法吗?
2.日期累加完全不是这样做的 ,switch语言机制你还没弄清楚啊
你可以试试无论你输入什么 都会输出非法月份
我已经把你的代码改好了 你想不出来 我可以发给你
#include <stdio.h>老师要求用switch-case语句,部分误差不管,我是初学C,太复杂搞不定啊~不过非常感谢你的详细解答,谢谢!谢谢!