33,311
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <time.h>
int GetCurrentYear()
{
struct tm *currDT;
time_t now;
time(&now);
currDT = localtime(&now);
printf("%d\n", currDT->tm_year + 1900);
return (currDT->tm_year + 1900);
}
int GetCurrentMonth()
{
struct tm *currDT;
time_t now;
time(&now);
currDT = localtime(&now);
printf("%d\n", currDT->tm_mon + 1);
return (currDT->tm_mon + 1);
}
int GetCurrentDay()
{
struct tm *currDT;
time_t now;
time(&now);
currDT = localtime(&now);
printf("%d\n", currDT->tm_mday);
return (currDT->tm_mday);
}
int CheckLeapYear(int year)
{
int isLeapYear = 0;
isLeapYear = !(year % (year % 100 ? 4 : 400));
return isLeapYear;
}
int CheckYearValid(int currYear, int currMonth, int currDay, int birthYear, int birthMonth, int birthDay)
{
if (birthYear <= 0)
{
printf(".....\n");
return -1;
}
if (birthYear > currYear)
{
printf("birthYear(%d) can not be later than %d\n", birthYear, currYear);
return -2;
}
return 0;
}
int CheckMonthValid(int currYear, int currMonth, int currDay, int birthYear, int birthMonth, int birthDay)
{
if ((birthMonth <= 0) || (birthMonth > 12))
{
printf("month(%d) is invalid, it should range from 1 to 12\n", birthMonth);
return -1;
}
if ((currYear == birthYear) && (currMonth < birthMonth))
{
printf("birthMonth(%d) can not be later than %d, when birthYear is %d\n", birthMonth, currMonth, birthYear);
return -2;
}
return 0;
}
int CheckDayValid(int currYear, int currMonth, int currDay, int birthYear, int birthMonth, int birthDay)
{
int MonthDays[] = {0xff, 31, 0xff, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0xff};
if ((birthDay <= 0) || (birthDay > 31 ))
{
printf("Invalid day : %d\n", birthDay);
return -1;
}
if (birthMonth == 2)
{
if (CheckLeapYear(birthYear))
{
if (birthDay >= 30)
{
printf("Invalid day(%d), %d is a leapYear and Feb. should smaller than 30\n", birthDay, birthYear);
return -2;
}
}
else
{
if (birthDay >= 29)
{
printf("Invalid day(%d), %d is not a leapYear and Feb. should smaller than 29\n", birthDay, birthYear);
return -3;
}
}
}
else
{
if (birthDay > MonthDays[birthMonth])
{
printf("Invalid day(%d) when month is %d\n", birthDay, birthMonth);
return -4;
}
}
if ((currYear == birthYear) && (currMonth == birthMonth) && (currDay < birthDay))
{
printf("birthDay(%d) can not be later than %d, when birthYear is %d and birthMonth is %d\n", birthDay, currDay, birthYear, birthMonth);
return -5;
}
return 0;
}
int main()
{
int curr_year, curr_month, curr_day;
int birth_year, birth_month, birth_day;
int flag = 0;
curr_year = GetCurrentYear();
curr_month = GetCurrentMonth();
curr_day = GetCurrentDay();
do
{
printf("your birthday ? input as year-month-day:\n");
scanf("%d-%d-%d", &birth_year, &birth_month, &birth_day);
flag = 0;
if (CheckYearValid(curr_year, curr_month, curr_day, birth_year, birth_month, birth_day) < 0)
{
flag = 1;
continue;
}
if (CheckMonthValid(curr_year, curr_month, curr_day, birth_year, birth_month, birth_day) < 0)
{
flag = 1;
continue;
}
if (CheckDayValid(curr_year, curr_month, curr_day, birth_year, birth_month, birth_day) < 0)
{
flag = 1;
continue;
}
printf("... %d-%d-%d...\n", birth_year, birth_month, birth_day);
}while (flag);
return 0;
}