计算一年中的日期c++; 我是编程新手,现在我正在攻读C++。

计算一年中的日期c++; 我是编程新手,现在我正在攻读C++。,c++,C++,例如,如果输入的年低于1583,但月和日值在范围内,则程序将显示错误消息。但是,如果年值高于1582,但月或日值超出范围,则仍将继续计算年的日 这是我的密码 #include <iostream> #include <cmath> #include <cstdlib> using namespace std; void showOption(); bool validMonth (int month); bool validYear (int year);

例如,如果输入的
低于
1583
,但
值在范围内,则程序将显示错误消息。但是,如果
值高于
1582
,但
值超出范围,则仍将继续计算

这是我的密码

#include <iostream>
#include <cmath>
#include <cstdlib>

using namespace std;

void showOption();
bool validMonth (int month);
bool validYear (int year);
bool leapYear (int year);
bool validDay (int year, int month, int day);
void getData (int& month, int& day, int& year);
void easterDate (int& month, int& day, int& year);
int daysBetween (int month1, int day1, int month2, int day2, int year);
int dayOfYear (int day, int month, int year);

const int january = 31;
const int february = 28;
const int leapYearFeb = 29;
const int march = 31;
const int april = 30;
const int may = 31;
const int june =30;
const int july = 31;
const int august = 31;
const int september = 30;
const int october = 31;
const int november = 30;
const int decemebr = 31;

int main()
{
    int option;
    int day, month, year;
    int easterDay, easterMonth;
    int day1, day2, month1, month2;

    bool repeat = false;

    showOption();

    cout << "please enter your option: ";
    cin >> option;
    cout << "" << endl;

    switch (option)
    {
        case 1:

            do
            {
                getData(month, day, year);

                validDay(year, month, day);

                if(validDay(year, month, day) == true)
                {
                    cout << "month " << month << " day " << day << " year " << year << endl;
                    cout << " " << endl;
                    cout << "They day of the year based on the date you entered is "<< dayOfYear(day, month, year) << endl;
                    cout << " " << endl;
                }
                else
                {

                    cout << "it is not a valid date." << endl;
                }


                cout << "do you still want to continue?" << endl;
                cout << "0 = no.     1 = yes.     ";
                cin >> repeat;
                cout << " " << endl;

            } while(repeat);

            break;
        case 2:

            do
            {

                cout << "do you still want to continue?" << endl;
                cout << "0 = no.     1 = yes.     ";
                cin >> repeat;

            } while(repeat);

            break;

        case 3:

            do
            {

                cout << "do you still want to continue?" << endl;
                cout << "0 = no.     1 = yes.     ";
                cin >> repeat;

            } while(repeat);

            break;
    }

}

void showOption()
{
    cout << " ------------------MENU------------------ " << endl;
    cout << " 1) Day of the year." << endl;
    cout << " 2) Date of Easter day." << endl;
    cout << " 3) Number of days between 2 days entered." << endl;
    cout << "" << endl;
    cout << "" << endl;
}

bool validMonth (int month)
{
    if (month > 0 || month < 13)
        return true;
    else
        return false;
}

bool validYear (int year)
{
    if (year > 1582)
        return true;
    else
        return false;
}

bool leapYear (int year)
{
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
        return true;
    else
        return false;
}

void getData (int& month, int& day, int& year)
{
    cout << "enter the number of year: ";
            cin >> year;
            cout << "" << endl;
            cout << "enter the number of month: ";
            cin >> month;
            cout << "" << endl;
            cout << "enter the number of day: ";
            cin >> day;
            cout << "" << endl;
}

bool validDay (int year, int month, int day)
{
    if(year > 1582)
    {
        if(validMonth(month))
        {
            if((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month || 8) || (month == 10) || (month || 12))
            {
                if((day > 0) || (day < 32))
                    return true;
                else
                    return false;
            }
            if((month == 4) || (month == 6) || (month == 9) || (month == 11))
            {
                if((day > 0) || (day < 31))
                    return true;
                else
                    return false;
            }
            if(month == 2)
            {
                if((day > 0) || (day < 29))     
                    return true;
                else
                    return false;
            }
            if((leapYear(year)))
            {
                if((month == 2) && ((day > 0) || (day < 30)))
                    return true;
                else
                    return false;
            }
        }
    }
}


int dayOfYear (int day, int month, int year)
{
    int dayTotal = 0;

    if(validDay(year, month, day))
    {
        if(month == 1)
        {
            dayTotal = 0 + day;
        }

        if(month == 2)
        {
            dayTotal = january + day;
        }

        if((month == 3) && (year > 1582))
        {
            dayTotal = january + february + day;

            if((month == 3) && (year > 1582) && (leapYear(year)))
            {
                dayTotal = january + leapYearFeb + day;
            }
        }

        if((month == 4) && (year > 1582))
        {
            dayTotal = january + february + march + day;

            if((month == 4) && (year > 1582) && (leapYear(year)))
            {
                dayTotal = january + leapYearFeb + march + day;
            }
        }

        if((month == 5) && (year > 1582))
        {
            dayTotal = january + february + march + april + day;

            if((month == 5) && (year > 1582) && (leapYear(year)))
            {
                dayTotal = january + leapYearFeb + march + april + day;
            }
        }

        if((month == 6) && (year > 1582))
        {
            dayTotal = january + february + march + april + may + day;

            if((month == 6) && (year > 1582) && (leapYear(year)))
            {
                dayTotal = january + leapYearFeb + march + april + may + day;
            }
        }

        if((month == 7) && (year > 1582))
        {
            dayTotal = january + february + march + april + may + june + day;

            if((month == 7) && (year > 1582) && (leapYear(year)))
            {
                dayTotal = january + leapYearFeb + march + april + may + june + day;
            }
        }

        if((month == 8) && (year > 1582))
        {
            dayTotal = january + february + march + april + may + june + july + day;

            if((month == 8) && (year > 1582) && (leapYear(year)))
            {
                dayTotal = january + leapYearFeb + march + april + may + june + july + day;
            }
        }

        if((month == 9) && (year > 1582))
        {
            dayTotal = january + february + march + april + may + june + july + august 
                       + day;

            if((month == 9) && (year > 1582) && (leapYear(year)))
            {
                dayTotal = january + leapYearFeb + march + april + may + june + july + august 
                       + day;
            }
        }

        if((month == 10) && (year > 1582))
        {
            dayTotal = january + february + march + april + may + june + july + august 
                       + september + day;

            if((month == 10) && (year > 1582) && (leapYear(year)))
            {
                dayTotal = january + leapYearFeb + march + april + may + june + july + august
                       + september + day;
            }
        }

        if((month == 11) && (year > 1582))
        {
            dayTotal = january + february + march + april + may + june + july + august 
                       + september + october + day;

            if((month == 11) && (year > 1582) && (leapYear(year)))
            {
                dayTotal = january + leapYearFeb + march + april + may + june + july + august 
                       + september + october + day;
            }
        }

        if((month == 12) && (year > 1582))
        {
            dayTotal = january + february + march + april + may + june + july + august
                       + september + october + november + day;

            if((month == 5) && (year > 1582) && (leapYear(year)))
            {
                dayTotal = january + leapYearFeb + march + april + may + june + july + august
                       + september + october + november + day;
            }
        }
    }

    return dayTotal;
}
#包括
#包括
#包括
使用名称空间std;
void showOption();
布尔有效月(整数月);
布尔瓦利代尔(国际年);
布尔闰年(国际年);
bool validDay(整数年、整数月、整数日);
void getData(整数和月、整数和日、整数和年);
无效东部日期(国际和月、国际和日、国际和年);
中间的整数日(整数月1、整数日1、整数月2、整数日2、整数年);
年的整数日(整数日、整数月、整数年);
const int一月=31;
const int二月=28;
常数=29;
const int march=31;
const int april=30;
const int may=31;
六月常数=30;
const int july=31;
const int八月=31;
九月常数=30;
康斯特国际10月31日;
const int 11月=30;
const int decemebr=31;
int main()
{
int选项;
整数日、月、年;
int easterDay,easterMonth;
int第1天、第2天、第1个月、第2个月;
布尔重复=假;
showOption();
cout>选项;

可以您正在使用许多析取(“或”、
|
),在这里您应该使用连词(“和”、
&&
)。
例如,
month>0 | | month<13
对于
month
为-10或1432是正确的


还有一些地方,
|
应该是
==

月长

const int month_lenght [ 31,28,31 ... ];
警告:此处的一月==0,该问题存在于Java Date january=0但day 1=first中。因此,备选方案可以是:

const int month_lenght [ 0 /*dummy*/  31,28,31 ... ];
那就不

    if(month == 1)
    {
        dayTotal = 0 + day;
    }

    if(month == 2)
    {
        dayTotal = january + day;
    }
但是
用于
循环

仅二月和闰年需要if

编辑:同意,错误与&&和||

编辑2: 大概

void easterDate (int& month, int& day, int& year);
将声明更改为:

void easterDate (int& month /* out */, int& day /*out */ , int year /* in */);

顺便说一句,除英美文化外,全世界都在思考(和计算)y/m/d或d/m/y

欢迎使用SO。请包括您收到的错误消息。@molbdnilo谢谢。天哪,我甚至没有注意到这个错误。奇怪的是,即使有您提到的错误,我的代码也编译了。只是我的程序输出不正确。谢谢您为我指出这一点。我已经纠正了。我想知道是什么原因我的逻辑有问题。谢谢你帮我指出。我已经纠正了。我想知道我的逻辑有什么问题。例如,闰年有366天。所以,如果我输入2000年、12月和31日。我应该得到366天。它只显示365天。不仅如此。如果我输入2000年、2月和30日,我应该得到e错误消息,但它计算并显示有61天。@tooDumbtoBeProgrammer如果是12月,则只使用“闰年2月”如果也是五月。我想你可能做了太多的复制和粘贴。提示:按如下方式链接计算:从日期开始。如果晚于一月,则添加
一月
;如果也晚于二月,则添加二月的正确日期;如果也晚于三月,则添加
三月
,依此类推。@milbdnilo是的。I f我注意到了。谢谢你纠正我。我仍在处理输出错误。奇怪的是我的代码能够编译。它没有显示错误消息。@tooDumbtoBeProgrammer这一点都不奇怪。编译器无法猜测你打算代码做什么,如果你错了,也无法告诉你。是的,我从未见过库函数这是我第二次学校作业。至于数组,我还没学会。这就是为什么我不使用数组。谢谢你的反馈