C语言结构体怎么判断是否输入重复,C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:...

本文介绍了如何使用C++编写一个程序,通过定义日期结构并实现isleapyear、islegal和calcday函数,来判断输入的两个日期是否合法,并计算它们之间的天数差。涉及闰年判断、日期合法性检查以及计算日期在当年的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如下:

typedef struct date

{

int year;

int month;

int day;

};

提示:

1.使用如下函数完成相应功能

int isleapyear(int y); //计算是否为闰年

int islegal(Date x); //计算日期是否合法

int calcday(Date x);//计算日期是当年的第几天,用于计算两个日期之间天数的差值

2.用于一维数组表示一年每月含有的天数

int dayofmonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

3.需要考虑闰年的情况

输入:输入为两行,第一行为三个整数,表示第一个日期的年月日;第二行为三个整数,表示第二个日期的年月日。

输入提示信息:"Please input the first date:”

输入格式:"%d %d %d"

输入提示信息:"Please input the second date:”

输入格式:"%d %d %d"

如:

Please input the first date: 2016 2 30

Please input the second date:2016 5 10

Please input the first date: 2016 2 10

Please input the second date:2015 12 9

Please input the first date: 2016 5 1

Please input the second date:2015 6 1

输出:输出一行是一个整数,代表两个日期之间相差的天数。若两个日期不在同一年,或者日期不合法,输出-1。

输出提示信息:"Day between two dates:”

输出格式:"%d"

输出样例:

Day between two dates:-1

Day between two dates:-1

Day between two dates::-1

#include

#include

typedef struct date

{

int year;

int month;

int day;

}Date;

int isleapyear(int y);

int islegal(Date a);

int calcday(Date a);

int main(){

int i=1;

Date a;

Date b;

printf("Please input the first date:");

scanf("%d %d %d",&(a.year),&(a.month),&(a.day));

printf("Please input the second date:");

scanf("%d %d %d",&(b.year),&(b.month),&(b.day));

printf("Day between two dates:");

if(a.year != b.year){

printf("-1");

}else if(islegal(a)==-1 ||islegal(b)==-1){

printf("-1");

}else{

printf("%d",calcday(b)-calcday(a));

}

}

int isleapyear(int y){

int i=0;

if((y%4==0 && y%100!=0) || (y%400==0)){

i=1;

}

return i;

}

int islegal(struct date a){

int dayofmonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

if(isleapyear(a.year)==1){

dayofmonth[1]++;

}

if(a.day<=dayofmonth[a.month-1] && a.day>0 && a.month>0 && a.month<13){

return 1;

}else{

return -1;

}

}

int calcday(struct date a){

int i,day=0;

int dayofmonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

if(isleapyear(a.year)==1){

dayofmonth[1]++;

}

for(i=0;i<=a.month-2;i++){

day=dayofmonth[i]+day;

}

day=day+a.day;

return day;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值