C语言用结构体求所给日期是一年第几天


#include <stdio.h>
#include <string.h>
#include <assert.h>
typedef struct date
{
	int year;
	int month;
	int day;
}DATE;
int days[12]={0};
int main()
{
	DATE date;
	int valid=0;int which_day;
	do
	{
	printf("请输入某天日期值(年,月,日),输入(0,0,0)代表结束\n");
	scanf("%d,%d,%d",&date.year,&date.month,&date.day);
	valid=isvalid(date);
	//printf("valid=%d\n",valid);
	if(valid==1)
	{
		which_day=whichday(date);
		printf("%d-%d-%d是%d年的第%d天\n",date.year,date.month,date.day,date.year,which_day);
	}
	else printf("您的输入有误\n");
	}
	while(date.year!=0||date.month!=0||date.day!=0);
	return 0;
}
int isleap(const int year_input)//是否是闰年
{
	int is_leap;
	assert(year_input>=0&&year_input<=9999);
		
	if(year_input%4==0&&year_input%100!=0)
		is_leap=1;
	else if(year_input%400==0)
		is_leap=1;
	else
		is_leap=0;
	return is_leap;
}
int isvalid(DATE date_input)//判断输入的日期是否有效
{
	int is_valid=0;int is_leap;
	is_leap=isleap(date_input.year);
	days[0]=31;
	days[2]=31;	days[3]=30;
	days[4]=31;	days[5]=30;
	days[6]=31;	days[7]=31;
	days[8]=30;	days[9]=31;
	days[10]=30;days[11]=31;
	switch(is_leap)
	{
		case 1:days[1]=29;break;
		case 0:days[1]=28;break;
	}
	if(date_input.year>=0&&date_input.year<=9999)
	if(date_input.month>=1&&date_input.month<=12)
	if(date_input.day>=0&&date_input.day<=days[date_input.month-1])
	is_valid=1;
	else is_valid=0;
	return is_valid;
}
int whichday(DATE date)//求是第几天
{
	int i;int sum=0;
	if(date.month==1)
		sum=date.day;
	else
	{
		for(i=0;i<date.month-1;i++)
		{
			sum=sum+days[i];
		}
		sum=sum+date.day;
	}
	return sum;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值