|
发表于 2022-10-13 15:54:53
|
显示全部楼层
- #include <stdio.h>
- #include <time.h>
- void today(int * year , int * month , int * day)
- {
- time_t T ;
- struct tm * TM ;
- time(& T) ;
- TM = localtime(& T) ;
- * year = TM -> tm_year + 1900 ;
- * month = TM -> tm_mon + 1 ;
- * day = TM -> tm_mday ;
- }
- int leapyear(int y)
- {
- return ((! (y % 4) && y % 100) || ! (y % 400)) ? 1 : 0 ;
- }
- int monthdays(int y , int m)
- {
- int r , md[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} ;
- r = 0 ;
- if(y >= 1900 && y <= 2999 && m > 0 && m < 13) {
- r = md[m - 1] ;
- if(leapyear(y) && m == 2) r += 1 ;
- }
- return r ;
- }
- int check(int y , int m , int d)
- {
- int e , r ;
- r = 0 ;
- if(y >= 1900 && y <= 2999 && m > 0 && m < 13 && d >= 1 && d <= monthdays(y , m)) r = 1 ;
- return r ;
- }
- int days(int y[] , int m[] , int d[])
- {
- int a , b , ds ;
- ds = 0 ;
- if(y[1] > y[0] || (y[1] == y[0] && m[0] < m[1]) || (y[1] == y[0] && m[0] == m[1]) && d[0] <= d[1]) {
- if(y[0] == y[1] && m[0] == m[1]) {
- ds = d[1] - d[0] ;
- } else if(y[0] == y[1]) {
- ds = monthdays(y[0] , m[0]) - d[0] ;
- for(b = m[0] + 1 ; b < m[1] ; b ++) ds += monthdays(y[0] , b) ;
- ds += d[1] ;
- } else {
- ds = monthdays(y[0] , m[0]) - d[0] ;
- for(b = m[0] + 1 ; b < 13 ; b ++) ds += monthdays(y[0] , b) ;
- for(a = y[0] + 1 ; a < y[1] ; a ++) ds += (leapyear(a)) ? 366 : 365 ;
- for(b = 1 ; b < m[1] ; b ++) ds += monthdays(y[1] , b) ;
- ds += d[1] ;
- }
- }
- return ds + 1 ;
- }
- int years(int y[] , int m[] , int d[])
- {
- int ys , a ;
- ys = 0 ;
- if(y[1] > y[0]) {
- ys = y[1] - y[0] ;
- if(m[0] > m[1] || (m[0] == m[1] && d[0] > d[1])) ys -- ;
- }
- return ys ;
- }
- int main(void)
- {
- int y[2] , m[2] , d[2] ;
- today(& y[1] , & m[1] , & d[1]) ;
- printf("今天是 : %4d-%02d-%02d\n" , y[1] , m[1] , d[1]) ;
- printf("输入您的出生日期 (y-m-d) : ") ;
- scanf("%d-%d-%d" , & y[0] , & m[0] , & d[0]) ;
- printf("您输入的出生日期是 : %04d-%02d-%02d\n" , y[0] , m[0] , d[0]) ;
- if(check(y[0] , m[0] , d[0]) && (y[1] > y[0] || (y[1] == y[0] && m[0] < m[1]) || (y[1] == y[0] && m[0] == m[1] && d[0] <= d[1]))) {
- printf("今天是阁下生命中的第 【%5d】 天!\n" , days(y , m , d)) ;
- if(m[1] == m[0] && d[1] == d[0]) {
- printf(" 今天是阁下 【%2d】 周岁的生辰!\n" , years(y , m , d)) ;
- printf(" 祝阁下生日快乐!\n") ;
- } else {
- printf(" 阁下已经 【%2d】 周岁了!\n" , years(y , m , d)) ;
- }
- } else {
- printf("日期输入错误!") ;
- }
- }
复制代码 |
|