C語言實現計算“已經活了多少天”


輸入生日,通過系統或者自己輸入,獲得當前日期,計算已經存活了多少天。

#include<stdio.h>
#include<time.h>
/**
 * 函數介紹:
 * 通過輸入生日,通過系統獲取今天的日期或者自行輸入今天的日期,計算你活了多少天了。
 * 參數介紹:
 * year_now:當前年份
 * month_now:當前月份
 * day_now:當然日子
 * year_b:生日年份
 * month_b:生日月份
 * day_b:生日日子
 */
int alive_days(int year_now, int month_now, int day_now, int year_b,
        int month_b, int day_b) {
    int sum = 0; //活了多少天
    int years = 0; //中途有幾年整,比如1999-2001,有一整年。
    int years_arry[200]; //存放中途的整年數,用來判斷平年閏年。
    int pingNian = 0;    //平年
    int runNian = 0;    //閏年
    years = year_now - year_b - 1;
    years_arry[0] = 0;
    //整年存入數組
    for (int i = 0; i < years; i++) {
        years_arry[i] = year_now - i - 1;
    }
    if (years_arry[0] > 0) {    //活了超過一年
        for (int i = 0; i < years; i++) {
            if (decide_year(years_arry[i]) == 1) {
                runNian++;
            } else {
                pingNian++;
            }
        }
        sum = pingNian * 365 + runNian * 366;
        sum = (sum + month_days(year_b, month_b) - day_b);
        while (++month_b <= 12) {
            sum = sum + month_days(year_b, month_b);
        }

        sum = sum + day_now;
        while (--month_now >= 1) {
            sum = sum + month_days(year_now, month_now);
        }
    } else {    //活着不到一年
        if (month_now == month_b) {
            sum = day_now - day_b;
        } else {
            sum = sum + month_days(year_b, month_b) - day_b;
            while (++month_b < month_now) {
                sum = sum + month_days(year_b, month_b);
            }
            sum = sum + day_now;
        }
    }

    return sum;
}
/**
 * 函數介紹:
 * 參數為年份與月份,返回這個月有多少天。
 */
int month_days(int year, int month) {
    int sum = 0;
    switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        sum = 31;
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        sum = 30;
        break;
    case 2:
        if (decide_year(year) == 1) {
            sum = 29;
        } else {
            sum = 28;
        }
    }
    return sum;
}
/**
 * 函數介紹:
 * 判斷這是平年還是閏年
 * 返回1為閏年,返回0為平年。
 */
int decide_year(int year) {
    int flag = -1;
    if ((year % 4 == 0) && (year % 100 != 0)) {
        flag = 1;
    } else if (year % 400 == 0 && year % 100 == 0) {
        flag = 1;
    } else {
        flag = 0;
    }
    return flag;
}
/**
 * 函數介紹:
 * 程序入口,獲取兩個時間點。
 */
int main() {
    int year_now;    //當前年
    int month_now;    //當前月
    int day_now;    //當前日
    int year_b;    //生日年
    int month_b;    //生日月
    int day_b;    //生日日
    int days = 0;    //總存活天
    int flag;    //是否自己輸入當前日期
    int alive_days(int year_now, int month_now, int day_now, int year_b,
            int month_b, int day_b);
    int month_days(int year, int month);
    int decide_year(int year);

    time_t timep;
    struct tm *p;
    time(&timep);
    p = gmtime(&timep);

    year_now = 1900 + p->tm_year;    //獲取系統當前年
    month_now = 1 + p->tm_mon;    //獲取系統當前月
    day_now = p->tm_mday;    //獲取系統當前日

    //為了避免printf與scanf順序出問題,設置緩存區為空。
    setvbuf(stdout, NULL, _IONBF, 0);

    printf("請輸入您的出生日期:\n");
    printf("年:");
    scanf("%d", &year_b);
    printf("月:");
    scanf("%d", &month_b);
    printf("日:");
    scanf("%d", &day_b);
    printf("--------------------\n");

    printf("系統獲取到今天的日期是:%d年%d月%d日\n", year_now, month_now, day_now);
    printf("是否使用當前日期?\n"
            "1.使用當前日期\t2.不使用,自己輸入\n在此輸入:");
    scanf("%d", &flag);
    if (flag == 2) {
        printf("請輸入今天的日期:\n");
        printf("年:");
        scanf("%d", &year_now);
        printf("月:");
        scanf("%d", &month_now);
        printf("日:");
        scanf("%d", &day_now);
    } else {
        printf("使用當前系統時間進行計算!\n");
    }
    printf("--------------------\n");

    printf("您的出生日期為:%d-%d-%d\n", year_b, month_b, day_b);
    printf("今天的日期為:%d-%d-%d\n", year_now, month_now, day_now);
    days = alive_days(year_now, month_now, day_now, year_b, month_b, day_b);
    printf("您已經活了%d天,且行且珍惜。", days);
    return 0;
}

程序運行結果:

1.自己輸入當前日期:

2.使用系統提供當前日期


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM