计算两个日期间的天数,并在用户输入时检查月份和日期是否有误,有误时要求重新输入。
编译器为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);elseprintf("日期相差%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);}
}

运行结果

用C语言计算两个日期之间的天数相关推荐

  1. vc 获取月份的天数_C语言计算两个日期之间的天数

    计算两个年月日之间的天数,思路是分别算出日期的总天数然后相减. 要考虑闰年的情况,判断闰年的口诀:4年一闰,100年不闰,400年再闰. ((year % 4 == 0 && year ...

  2. c语言日期间的天数,C语言计算两个日期之间的天数

    计算两个年月日之间的天数,思路是分别算出日期的总天数然后相减. 要考虑闰年的情况,判断闰年的口诀:4年一闰,100年不闰,400 计算两个年月日之间的天数,思路是分别算出日期的总天数然后相减. 要考虑 ...

  3. 计算两个日期之间的天数(C语言实现)

    计算两个日期之间的天数(C语言实现) #include <stdio.h> int date(int n,int m1,int d1,int m,int m2,int d2) {int i ...

  4. 如何利用计算机计算天数,如何应用Win10系统电脑中的计算器计算两个日期之间的天数?...

    如何应用Win10系统电脑中的计算器计算两个日期之间的天数? 相信很多小伙伴都有在使用windows10系统的电脑,其中的计算器如何才能用来计算两个日期之间的天数呢?方法很简单,下面小编就来为大家介绍 ...

  5. 微软面试题目(一) 计算两个日期之间的天数

    微软的面试,没能参加啊,只好打听了下题目,其中一题是在20分钟内写出:计算两个日期之间天数的方法.昨天晚上想了一下,今天实现了一下,经过调试,差不多一个小时才弄好,惭愧啊 代码如下: /******* ...

  6. sql年月日加减法,计算两个日期之间的天数

    1.年月日加减法(时间字段为  hiredate,表名为 emp) DB2 selecthiredate -5 day as hd_sub_5day,hiredate +5 day as hd_add ...

  7. 计算两个日期之间的天数,你知道哪些函数能够计算呢?

    有时候我们需要计算两个日期之间的天数,一般情况下只需要计算一两个的话可以直接口算,但是整个表格的日期都需要计算出他们之间的天数,还是用口算的方法吗?当然不能这么浪费时间!Excel中有计算两个日期之间 ...

  8. java怎么计算相隔多少天_java计算两个日期之间相差天数和相隔天数详解

    大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,"相差"和"相隔"是有区别的,然而就是这些区别害死很多人, ...

  9. JavaScript:实现计算两个日期之间的天数算法(附完整源码)

    JavaScript:实现计算两个日期之间的天数算法 const isLeap = (year) => {if (year % 400 === 0) return trueelse if (ye ...

最新文章

  1. linux 查看 文档 不显示注释 命令
  2. 【Applet编写应用小程序】Applet类APIの基本知识和第一个程序
  3. PHP路径realpath __FILE__ __DIR__ dirname
  4. [转]微信小程序登录逻辑梳理
  5. eclipse中无法新建Android工程 出现问题:Plug-in org.eclipse.ajdt.ui was unable to load
  6. httppost请求工具类
  7. matlab安装matconvnet
  8. 别把项目成功当目标!——项目经理的误区(1)(转)
  9. excel 计算机职称,职称计算机2017年Excel知识点:工作表的编辑
  10. easyUpload.js插件文件上传
  11. 编程珠玑第二版 ---- 第一章个人习题集(Java)
  12. 火影T5A笔记本系统损坏了无法进入桌面怎么办?
  13. 黄金再次失守千八关口 对冲基金空头寸增加
  14. 迅雷近几年笔试题及其分析
  15. 电脑连不上网一般处理方式
  16. 一些关于船舶撞桥的数据
  17. matlab做偏最小二乘回归(PLS带精度验证)
  18. 论文python爬虫_论的解释|论的意思|汉典“论”字的基本解释
  19. linux脚本剪切文件覆盖了怎么恢复,剪切的文件如何恢复 被剪切或删除的文件夹怎么恢复...
  20. 数字从0递增到指定数值

热门文章

  1. 多媒体高精度定时器介绍
  2. 思享无限组建技术团队;伏达半导体推出50W车载无线充解决方案;峰米科技推出超短焦激光投影仪 | 全球TMT...
  3. 案例:模拟人造卫星沿轨道围绕地球旋转
  4. 以后都不会用altium designer!!!
  5. About BlueStacks 模拟器
  6. 神经机器翻译中的关键技术
  7. 计算机bios设置中英文翻译,主板BIOS界面全英文翻译 分享一个主板BIOS设置英文对照表大全...
  8. 区块链技术对电商的影响
  9. mvc 模型验证及正则表达式
  10. weiit—全渠道新零售saas,重构“人、货、场”