C语言实现计算“已经活了多少天”

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

输入生日,通过系统或者自己输入,获得当前日期,计算已经存活了多少天。

#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.使用系统提供当前日期

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“C语言实现计算“已经活了多少天”” 的相关文章

jsp导出word

<%@ page contentType="application/vnd.ms-word; charset=utf-8"%> <%@ page pageEncoding="utf-8"%> <% String fileName = "jsp导出wor...

零知识证明学习(三)—— 非交互式零知识证明(zkSNARKs)

非交互式零知识证明 本节主要介绍一种新的零知识证明- z k S N...

MyEclipse中could not find the main class. Program will exit.问题

在MyEclipse中运行任何控制台的程序JVM都会出现上述问题,并报如下错误: java.lang.UnsupportedClassVersionError: Bad version number in .class file at java.lang.ClassLoader.defineCla...

Linux 中实时查看日志的3种方法

Linux 中实时查看日志的3种方法 最近我从cnaaa.com购买了云服务器。 我们大家应该都知道如何在 Linux 中查看文件比如可以使用 cat 或者 less 命令。 这对于查看静态文件来说是可以的。日志文件是动态的其内容随时会变化要监测日志文件需要在日志文件内容改变时也能实时看到。...

Linux crontab定时执行任务

名称 : crontab 使用权限 : 所有使用者 使用方式 : crontab file [-u user]-用指定的文件替代目前的crontab。 crontab-[-u user]-用标准输入替代目前的crontab. crontab-1[u...

华为云全流程等保服务,帮助企业守护信息安全

如今,网络信息安全的重要性愈发凸显,大到党政机关、金融系统,小到电商、游戏、酒店甚至网民个人,信息安全关系到我们每个人乃至整个国家的切身利益,信息安全保护刻不容缓。保护网络信息安全已经提升到了法律层面,我们国家已经开始实行网络安全等级保护制度,简称“等保”,旨在通过网络安全等级保护制度,对网络实施分...