你也许误会他的意思了,他是说让程序判断输入的年份是否闰年,是,则2月的天数变为29天;否则2月变为28天。为了直观的表达3楼的意思,我采用函数的方法。以下是我帮你修改的代码
#include <stdio.h>
int check(int year)
{
int sing;
if((year%4==0 && year%100!=0) || (year%400==0)) sing=1;
else sing=0;
return(sing);
}
int num[12]={31,28,31,30,31,30,31,31,30,31,30,31};
struct date
{
int year,month,day;
};
int sum(int year,int month,int day);
void main()
{
int i;
struct date stu;
do
{
printf("请输入:年,月,日:\n");
scanf("%d,%d,%d",&stu.year,&stu.month,&stu.day);
if(check(stu.year)==1) num[1]=29;
else num[1]=28;
if((stu.day>num[stu.month-1])||(stu.month>12)||(stu.month<=0)||(stu.day<=0))
printf("错误的日期,请重新输入!\n");
}while((stu.day>num[stu.month-1])||(stu.month>12)||(stu.month<=0)||(stu.day<=0));
printf("Today is the %d day!",sum(stu.year,stu.month,stu.day));
}
int sum(int year,int month,int day)
{
static int i,total;
for(i=0;i<month-1;i++)
total+=num[i];
total+=day;
if((year%400==0||(year%100&&year%4==0))&&month>2)
total++;
return total;
}
注解:check()函数正是我为了检测是否闰年而加入的,虽然我看到你后面的代码也具备有检测闰年的功能,但是为了简洁,我还是自己写吧~
工作原理:当输入的年份为闰年:NUM[1]=29 否则NUM[2]=28这样就结了~
注意:①首先要更正你一点的是你的手误:
2月份最多只有29天,不会有30天,所以
int num[12]={31,30,28,30,31,30,31,31,30,31,30,31};
更正为
int num[12]={31,28,31,30,31,30,31,31,30,31,30,31};
但是这个数据更正不更正对这个程序来说根本就没关系,如果你喜欢也可以把他该为999,我只是想告诉你个常识性的问题而已。
②然后是你的检查输入天数的错误,你限制了输入月份、天数的最大值,这个很好,但是你也要注意下最小值的设置呀!-_-! 我帮你改过来了。
[此贴子已经被作者于2004-07-19 23:36:50编辑过]