首先, 定义结构体, 年, 月, 日

struct date{
    int month;
    int day;
    int year;
};

然后,就可以输入今天的日期了

struct date today,tomorrow;

printf("Enter today's date(mm dd yyyy):");
    scanf("%i %i %i",&today.year,&today.month,&today.day);

这里需要判断平年和闰年, 所以先调用一个函数

bool isLeap(struct date d)
{
    bool leap = 0;
    if((d.year %4==0 && d.year %100 !=0) || d.year%400 == 0){
        leap = 1;
    }
    return leap;
}


返回的数值,就可以判断润平年了

我们思考一下,现在知道二月的天数了, 所以,我们要想知道明天日期,只用号数加一就可以了,  这里需要使用if 语句进行逐层排除

最简单的就是 , 只用号数加一天, 别的不用变,  所以我们要确保今天不是本月的最后一天, 所以就是拿着今天的号数和本月的天数作对比

today.day != number0fDays(today)

所以, 这里我们又需要进行, 调用一个含有结构体的函数, 来判断本月的天数了, 因为还要掺杂二月,  所以也得调用判断润平年的函数

int number0fDays(struct date d)
{
    int days;
    const int daysPerMOnth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(d.month == 2 && isLeap(d)){
        days = 29;
    }else{
        days = daysPerMOnth[d.month-1];
    }
    return days;
}


我们这里和润平年定义的结构体参数是一样的, 因为我们需要同一个数据, 首先就是定义天数,  然后就是创建一个数组,

对每一个月进行天数填充,  可以只填平年的,做一个二月的判断就行了,  灵活掌握

然后就是, 天数对应的数组地址是月份减一, 因为是从0 开始算的.

也可以分开,自己掌握


int number0fDays(struct date d)
{
    int days;
    const int daysPerMOnth[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    const int daysPerMOnth_1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(isLeap(d)){
        
        days = daysPerMOnth[d.month-1];
    }else{
        days = daysPerMOnth_1[d.month-1];
    }
    return days;
}

接下来, 就简单了,判断,  当本号不等于 本月的天数的时候,  就把号数加一, 其他不变就行了

if(today.day != number0fDays(today)){
        tomorrow.day = today.day+1;
        tomorrow.month = today.month;
        tomorrow.year = today.year;
    }

现在思考特殊情况,  每月最后一天,  和一年最后一天,  先限制最少的, 所以就是, 每年最后一天的话,  第二天,  天数月份都变为

1,  年份加一就行了

else if(today.month == 12){
        tomorrow.day = 1;
        tomorrow.month = 1;
        tomorrow.year = today.year+1;
    }

最后就是, 每月的最后一天了,  直接号数变为1, 月份加一,  年份不变

else{
        tomorrow.day = 1;
        tomorrow.month = today.month + 1;
        tomorrow.year = today.year;
    }

从这里就得出一个规律, if语句, 先限制小范围, 剩余的就是  大范围相同的类型,  减少麻烦

最后输出就行了

printf("tomorrow是%i-%i-%i.\n",tomorrow.year,tomorrow.month,tomorrow.day);
    return 0;

总结:我们在利用结构体进行函数参数调用的时候,  可以一次性调用很多, 但是如果真的要改变结构体函数的值的话,  就需要

利用指针, 对传入参数的地址,  进行修改,  不然的话,  调用函数的话,  只能通过return 返回数值了.

源代码:

#include <stdio.h>
#include <stdbool.h>struct date{int month;int day;int year;
};bool isLeap(struct date d);
int number0fDays(struct date d);int main(int argc, char const *argv[])
{struct date today,tomorrow;printf("Enter today's date(mm dd yyyy):");scanf("%i %i %i",&today.year,&today.month,&today.day);if(today.day != number0fDays(today)){tomorrow.day = today.day+1;tomorrow.month = today.month;tomorrow.year = today.year;}else if(today.month == 12){tomorrow.day = 1;tomorrow.month = 1;tomorrow.year = today.year+1;}else{tomorrow.day = 1;tomorrow.month = today.month + 1;tomorrow.year = today.year;}printf("tomorrow是%i-%i-%i.\n",tomorrow.year,tomorrow.month,tomorrow.day);return 0;}
int number0fDays(struct date d)
{int days;const int daysPerMOnth[12]={31,29,31,30,31,30,31,31,30,31,30,31};const int daysPerMOnth_1[12]={31,28,31,30,31,30,31,31,30,31,30,31};if(isLeap(d)){days = daysPerMOnth[d.month-1];}else{days = daysPerMOnth_1[d.month-1];}return days;
}bool isLeap(struct date d)
{bool leap = 0;if((d.year %4==0 && d.year %100 !=0) || d.year%400 == 0){leap =1 ;}return leap;
}

输入现在的日期,输出明天的日期相关推荐

  1. 获得昨天的日期,今天的日期,明天的日期

    1.昨天的年 DateTime.Now.AddDays(-1).Year 昨天的月份 DateTime.Now.AddDays(-1).Month 昨天的额日期 DateTime.Now.AddDay ...

  2. C语言编程题 输入今天的日期年月日,输出明天的日期

    #include <stdio.h> int main() {int y,m,d;printf("请输入年月日:");scanf("%d%d%d", ...

  3. java中输入日期_Java中的日期操作

    在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...

  4. C语言实验(十三):函数(求两个任意分数和的最简形式、将正整数转换为字符串输出、某日期是该年第几天)

    C语言实验(十三):函数(求两个任意分数和的最简形式.将正整数转换为字符串输出) 一.任意输入两个分数,用C语言编程求这两个分数和的最简形式.如:输入为"2/6 + 12/9 =" ...

  5. Python写,将输入的yyyy/mm/dd格式的日期显示为yyyy年mm月dd日。

    7.(程序题)编程将输入的yyyy/mm/dd格式的日期显示为yyyy年mm月dd日. str = input("请输入日期:") length=len(str) if str[6 ...

  6. 计算明天的日期C语言,c语言源代码(计算明天的日期)

    #include "stdio.h" struct date{ //声明结构体 int year; int month; int day; }; intnumberofday(st ...

  7. c语言已知年第几天求哪月哪日,已知今天的日期(年月日),求明天的日期(年月日)...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 已知今天的日期(年月日),求明天的日期(年月日): 要求考虑: 1.月份为12月时,年份应加1且月份变为1 2.天为当月最后一天时,月份应加1且天变为1 ...

  8. linux expect日期加减,如何“输出”出命令“日期”? (linux/expect/sftp)

    我想从sftp服务器安排一个文件副本.公共密钥是不允许的,所以我只知道使用expect的一种方法.如何"输出"出命令"日期"? (linux/expect/sf ...

  9. python代码获取今天、昨天、明天的日期

    python代码获取今天.昨天.明天的日期 #python代码获取今天.昨天.明天的日期 # Python program to find yesterday, # today and tomorro ...

最新文章

  1. 《C语言及程序设计》实践项目——画分支结构流程图
  2. 构建私有云时,需要考虑的十大要点
  3. VUE-生命周期钩子
  4. C++基础--简单Socket通信实例
  5. 使用 fail2ban 防御 SSH 暴力破解
  6. 数字图像处理王伟强_深度学习主导下,还有必要学数字图像处理?
  7. 安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】
  8. 安装nginx的过程
  9. CreateDirectory和SHCreateDirectoryExW区别
  10. webmail lite php,自建webmail网页客户端
  11. 面向对象编程Sample(C#)
  12. python os模块大全
  13. 如何在InfoPath2010中转换主数据源
  14. 文字游戏——《小黑屋》
  15. 共享自习室创业项目分析
  16. Python与Julia结合使用的个人经验
  17. 程序员进阶!阿里P7级别面试经验总结,深度好文
  18. 谷歌:加入账号其他设备登陆通知功能
  19. 电子科技大学和东北大学计算机专业哪个好,电子科技大学、南京航空航天大学、东北大学,你会怎么选择?...
  20. av_parser_parse2函数介绍

热门文章

  1. 身份证号码的严格校验(非正则)
  2. Jexl表达式引擎(2)
  3. python读取数据的函数详解_python之文件读写详解
  4. python中“羊车门问题”的简单分析与代码实现
  5. 命令行基础、目录和文件管理、教学环境介绍、
  6. Win10电脑怎么恢复出厂设置
  7. PDPS软件:碰撞检测功能介绍与使用方法
  8. android接入华为推送
  9. 怎样学好英语?(多年英语学习经验总结)
  10. javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? HTTPS请求异常