在C ++中将天数添加到给定日期

时间:2018-09-29 20:33:56

标签: c++

我正在尝试构建一个程序,该程序在某些天后返回日期。 即使我的代码没有任何错误,但是在运行它时,由于某些原因我很难弄清输出日期,所以输出日期略有偏离。 您能帮我解决代码吗?

例如)输入:

#include <iostream>
using namespace std;

int main() {

    //declare variables
    int y,m,d;
    int yoon=0;//assume to be normal year at first

    //take user input
    cin>>y>>m>>d;

    //separate leap year & normal year (leap year: 1 , normal year = 0)
    if (y % 4 ==0){
        yoon = 1;
        if (y % 100 ==0) {
            yoon = 0;
            if (y % 400 == 0){
                yoon= 1;
            }
        }
    }

    //iterate for 100, 200, 300 days
    for (int x=100;x<=300;x+=100) {
        //add days to the given date
        d+=100;
        //iterate untill there is no day overflow
        while(true)
        {
            //check the number of days in given month and subtract if it overflows
            if ((m == 4 || m==6 || m==9 || m==11) && d>30)
            {
                d-=30;
                m++;
            }
            //different days for leap year
            else if (m==2 && d>29 && yoon ==1)
            {
                d-=29;
                m++;
            }
            //different days for normal year
            else if (m==2 && d>28 && yoon ==0)
            {
                d-=28;
                m++;
            }
            else if (d>31)
            {
                d-=31;
                m++;
                //check for leap year if the year changes
                if (m==13){
                    m=1;
                    y+=1;
                    if (y % 4 ==0){
                        yoon = 1;
                        if (y % 100 ==0) {
                            yoon = 0;
                            if (y % 400 == 0){
                                yoon= 1;
                            }
                        }
                    }
                }
            }
            else
            {
                break;
            }
        }
        //output
        cout<<x<<":"<<" "<<y<<" ";
        if (m>0 && m<10){cout<<0;}
        cout<<m<<" ";
        if (d>0 && d<10){cout<<0;}
        cout<<d<<endl;
    }


    return 0;
}

应返回:

fgets

但不是。...

谢谢。

scanf

1 个答案:

答案 0 :(得分:1)

尽管您的代码还有很多改进的余地,但它确实可以按预期工作。您可以通过输入来声明:

2018
1
1

您期望输出为:

100: 2018 04 10
200: 2018 07 19
300: 2018 10 27

但是输出是:

100: 2018 04 11
200: 2018 07 20
300: 2018 10 28

这是正确的,因为您输入1作为日期,然后每次在循环中添加100。因此,您的代码将返回101、201和301天。

关于为什么在输出中看不到的原因,所有计算都使用d完成,但是输出使用x作为标签, 100 ,分别为200和300。