【C语言】NextDay问题

输入一个时间,某年某月某日,输出下一天
主要就是边界控制,不使用愚蠢写法,无技术含量,仅仅逻辑性考验
注释完善,自行理解

执行环境:Ubuntu18.04  CLion/GCC		
					   WIndows环境也无需修改

Code:

/*  Next Day
 * 注意:紧扣题意,输入格式为:xx年xx月xx日,正好利用这锻炼格式化字符串sscanf()函数
 * 至于例如2019 02 25这种格式,如此一来,写的更没意思了
 * 包括多此一举在堆区开辟空间,同时也避免了用户故意无限输入导致栈区溢出问题
 * 学习软件测试,就要考虑到万无一失
 * 考研的同学可以多了解这些函数
 *
 * */
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    //定义13个长度,0号索引不使用,避免后期+1操作
    int monArray[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    printf("输入年月日[Format:xx年xx月xx日]:\n");

    //堆区开辟空间,栈区空间Windows默认只有1M,Linux一般默认8M,可以扩大,在此不做赘述
    char *time = malloc(64);
    scanf("%s", time);

    int year, mon, day;

    //格式化字符串置于对应变量中
    sscanf(time, "%d年%d月%d日", &year, &mon, &day);

    //判断闰年后2月份数组天数加一
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
        monArray[2]++;

    //月,日未超范围
    if ((mon <= 12 && mon >= 1) && (day <= monArray[mon])) {
        //月尾判断
        if (day == monArray[mon]) {
            //到达年尾
            if (mon == 12) {
                day = 1;
                mon = 1;
                year++;
            }
                //只达到月尾
            else {
                day = 1;
                mon++;
            }
        }
            //月日均为超范围
        else {
            day++;
        }
    }
        //月日超范围,直接return
    else {
        printf("Data Error\n");
        return EXIT_FAILURE;
    }

    //计算成功
    printf("Next Day is:%d年%d月%d日\n", year, mon, day);
    return EXIT_SUCCESS;
}

在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我姥爷是校长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值