求救简化代码!!

求救!!这个题目是要求用户输入一个日期,程序输出前一天日期,我想简化以下代码!!

求指点!!老师说可用字符串,求教!

#include <iostream>       // 头文件
using namespace std;      // 使用std
int main() {              // 主函数
    int y, m, d, n;  //设置变量
    cout << "请输入年  月  日:";//提示输出语
    cin >> y >> m >> d;       //输入
    if (m == 1 && d == 1) {//新年第一天
        y -= 1;//年份减少1
        m += 11;//月份变为12
        d = 31;//日期变为31
        cout << y << "年" << m << "月" << d << "日";//输出
    }
    switch (m) {
    case 2: {               //2月份
        if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
            n = 29;        //是闰年
        else
            n = 28; break;   //不是闰年
    }
    case 4: case 6: case 9: case 11:
        n = 30; break;      //4,6,9,11月
    default:
        n = 31; break;      //其他月份
    }//以上判断日期与月份是否匹配
    if (m > 13 || d < 0 || d>n) {//错误时间
        cout << "输入时间错误,请重新输入。";//输出
        return 0;//直接返回
    }
    if(d==1){//该月份第一天
        m -= 1;//月份减一
        switch (m) {
        case 2: {               //2月份
            if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
                n = 29;        //是闰年
            else
                n = 28; break;   //不是闰年
        }
        case 4: case 6: case 9: case 11:
            n = 30; break;      //4,6,9,11月
        default:
            n = 31; break;      //其他月份
        }
        d = n;//上一个月最后一天的日期
        cout << y << "年" << m << "月" << d << "日";//输出
    }
    else 
        cout << y << "年" << m+1 << "月" << d -1<< "日";//输出
    return 0;                   // 正常返回
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值