创建一个结构体date,包括year,month,day三个成员,分别代表日期的年,月,日。
1.在主函数中输入一个日期,要对输入的日期有效性进行验证,在日期合法的情况下调用下面3个函数实现对应的功能
1)调用nextday()函数,求输入日期的下一天日期,求得结果在nextday()函数中显示
2)调用prevday()函数,求输入日期的前一天日期,求得结果在prevday()函数中显示
3)调用howmanydays()函数,求输入的日期是该年的第几天,求得结果返回到主函数中显示
2.输入一个日期之后要同时完成以上三个功能,显示完结果之后,询问用户是否继续,如果用户同意继续,则再次提示用户输入一个日期,再次完成以上的三个功能。
3.完成以上功能时,要考虑闰年的情况.
#include<stdio.h>
#define N 200
struct date
{
int year;
int month;
int day;
};
void nextday(struct date next[]);
void prevday(struct date prev[]);
void howmanyday(struct date many[]);
void main()
{
struct date day[N];
int i;
char ans;
do
{
printf("请输入%d年%d月%d日",day.year,day.month,day.day);
scanf("%d %d %d",&day.year,&day.month,&day.day);
if(day.year>0)
if(day.month<1 || day.month>12)
if(date.day<1 || day.day>31)
printf("输入错误,请重新输入!");
printf("是否继续输入?(y or n):");
scanf(" %c",&ans);
}while(ans=='y' || ans=='Y')
}
小弟这道题只写了一个框架,请指点,我迷糊了。。。有好多错的地方!~!!!
----------------解决方案--------------------------------------------------------
if(day.year>0)
if(day.month<1 || day.month>12)
if(date.day<1 || day.day>31)
printf("输入错误,请重新输入!");
这3个判断不应该嵌套起来,
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 200
struct date
{
int year;
int month;
int day;
}dates;
//void nextday(struct date next[]);
//void prevday(struct date prev[]);
void howmanyday(struct date many[]);
void main()
{
struct date days[N];
char ans;
do
{
while(1)
{
printf("请输入年,月,日:");
scanf("%d,%d,%d",&dates.year,&dates.month,&dates.day);
if(dates.year>=0 && dates.month>0 && dates.month<=12 && dates.day>0 && dates.day<=31)
break;
else
printf("输入错误,请重新输入!\n");
if((dates.year%4==0 && dates.year%100!=0) || dates.year%400==0 && (dates.month>=3 && dates.day<29))
{
dates.day++;
}
}
// prevday(days);
howmanyday(days);
// nextday(days);
printf("是否继续输入?(y or n):");
scanf(" %c",&ans);
}while(ans=='y' || ans=='Y');
}
void howmanyday(struct date many[])
{
int days;
switch(dates.month)
{
case 1:days=dates.day; break;
case 2:days=dates.day+31; break;
case 3:days=dates.day+59; break;
case 4:days=dates.day+90; break;
case 5:days=dates.day+120; break;
case 6:days=dates.day+151; break;
case 7:days=dates.day+181; break;
case 8:days=dates.day+212; break;
case 9:days=dates.day+243; break;
case 10:days=dates.day+273; break;
case 11:days=dates.day+304; break;
case 12:days=dates.day+334; break;
}
if((dates.year%4==0 && dates.year%100!=0 || dates.year%400==0) && dates.month>=3)
days+=1;
printf("%d年%d月%d日,是该年的%d天\n",dates.year,dates.month,dates.day,days);
}
/*void nextday(struct date next[])
{
int nday;
}*/
让我改成这个样子了。。。可是没有办法判断闰年的情况了,例如2000年2月30日。。这个都能提醒,,,怎么办呀~
----------------解决方案--------------------------------------------------------