计算两个日期间的天数,并在用户输入时检查月份和日期是否有误,有误时要求重新输入。
编译器为visual studio 2019
#include<stdio.h>
#include<stdlib.h>
int func1(int flag,int mon);
int func2(int mon, int day, int year);
int check(int in, int flag);
int main()
{
system("color F0");
int year1,year2,mon1,mon2,day1,day2,flag,i,p,n=0,m=0;
void input(int *year,int *mon,int *day);
void change(int* x, int* y);
while (1)
{
printf("请输入起始时间:\n");
input(&year1, &mon1, &day1);
printf("请输入结束时间:\n");
input(&year2, &mon2, &day2);
if ((year1 * 10000 + mon1 * 100 + day1) > (year2 * 10000 + mon2 * 100 + day2)){
change(&year1, &year2);
change(&mon1, &mon2);
change(&day1, &day2);
}
p = year2 - year1;
i = p;
while (p >= 2)
{
p = p - 1;
flag = year1 + p;
if ((flag % 4 == 0) && ((flag % 400 == 0) || (flag % 100 != 0)))
n++;
else
m++;
}
year1 = ((year1 % 4 == 0) && ((year1 % 400 == 0) || (year1 % 100 != 0))) ? 366 : 365;
year2 = ((year2 % 4 == 0) && ((year2 % 400 == 0) || (year2 % 100 != 0))) ? 366 : 365;
flag = func2(mon2, day2, year2) - func2(mon1, day1, year1);
if (i == 0)
printf("日期相差%d天\n\n", flag);
else if (i == 1)
printf("日期相差%d天\n\n", flag + year1);
else
printf("日期相差%d天\n\n", flag + year1 + n * 366 + m * 365);
}
return 0;
}
void input(int* year, int* mon, int* day)
{
int flag;
printf("年:");
scanf_s("%d", year);
printf("月:");
scanf_s("%d", mon);
*mon = check(*mon,12);
flag = ((*year % 4 == 0) && ((*year % 400 == 0) || (*year % 100 != 0))) ? 1 : 0;
flag = func1(flag, *mon);
printf("日:");
scanf_s("%d", day);
*day = check(*day, flag);
}
void change(int* x, int* y)
{
int z;
z = *y;
*y = *x;
*x = z;
}
int func1(int flag,int mon)
{
int a, b;
a = (mon == 2) ? 1 : 0;
b = ((mon == 1) || (mon == 3) || (mon == 5) || (mon == 7) || (mon == 8) || (mon == 10) || (mon == 12)) ? 1 : 0;
switch (a * 4 + b * 2 + flag)
{
case 0:
case 1:return 30; break;
case 2:
case 3:return 31; break;
case 4:return 28; break;
case 5:return 29; break;
}
}
int func2(int mon, int day, int year)
{
int flag,num=0;
if (year == 365){
for (flag = 1; flag < mon; flag++)
{
num = func1(0, flag) + num;
}
}
else{
for (flag = 1; flag < mon; flag++)
{
num = func1(1, flag) + num;
}
}
return num + day;
}
int check(int in, int flag)
{
if ((in <= flag) && (in >= 1))
return in;
else{
printf("输入有误,请重新输入:");
scanf_s("%d", &in);
return check(in,flag);
}
}
运行结果