case12
好像用不到

对以上程序,如果输入2004-1-4日会怎么样。是不是多算了一天?SB才会问2004-4-31
main()
{
int day,month,year,sum,leap;
printf("\\nplease input year,month,day\\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month){
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day;
if(year%400==0||(year%4==0&&year%100!=0))
leap=1;
else
leap=0;
if(leap==1&&month>2)
sum++;
printf("It is the %dth day.",sum);}
如果要考虑周到,要做的事情实在太多了。
你还要验证用户的输入是否仅仅为无符号的整数,这个时候推荐你用gets()函数来接受用户的输入,然后对字符串进行格式化操作
恩~还得考虑的程序自动修复的能力。就是说一旦用户的错误输入让程序产生错误,你要使得你的程序能经受住这个错误,并且能自动修复。
如果你还考虑到黑客的溢出攻击,推荐你使用fgets()函数来接受用户的输入
^_^ case 12 是多余的....
if ((x.y%4==0)&&((x.y%400==0)||(x.y%100==1)==0))
润年的条件是符合下列条件之一..
1.能被4整除且被400整除.
2.能被4整除且不被100整除.
i替换成j ,,^_^ ...的确可以.
^_^ 的确是,如果输入 4-31 多算一天了...^_^
这算出来的结果是总天数呀!
#define leep(year) (!(year%400)||(!(year%4)&&year%100))
main()
{
int sum;
struct { int y;
int m;
int d;
}sc;
printf ("Please Input Date (YYYY-MM-DD) : ");
scanf ("%d-%d-%d",&sc.y,&sc.m,&sc.d);
switch(sc.m) /*先计算某月以前月份的总天数*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59+leep(sc.y);break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+sc.d; /*再加上某天的天数*/
printf("It is the %dth day.",sum);
getch();
}
没有考虑输入数据的准确性等问题呵呵
还有那个使用次数问题我也没加进去运行通过了
能被400整除当然能被4整除了,所以第一个条件可以写成能被400整除就可以了。
然后结合你的这两个条件,你写的判断语句还是错的。自己仔细看一下。
另外你的程序在处理1月份的日期会出错,先想一下为什么?