-2

我一直在做这个任务,希望我做一个类,当用户输入一个从 1 到 365 的数字时输出一个月和一天。我没有收到任何错误,但我似乎无法从我的print()函数中获得任何输出。任何帮助,将不胜感激。:]

#include <iostream>
#include <string>

using namespace std;


class DayOfYear
{
    public:
        DayOfYear(){};
        DayOfYear(int);
        ~DayOfYear(){};
        void print();

    private:
    int day;

};

int main()
{
    int numInput;
    cout << "\n\n\tPlease enter a day number between 1 and 365.\n\t";
    cin >> numInput;
    while ((numInput < 1) || (numInput > 365))
    {
        cout << "\n\tError* Please enter a number between 1 and 365.\n\t";
        cin >> numInput;
    };

    DayOfYear day1(numInput);
    //cout << "\n\n\tThat day is ";
    day1.print();
    cout << " ";

    system ("PAUSE");
    return 0;

}    


DayOfYear::DayOfYear(int numInput)
{
    numInput = day;
}

void DayOfYear::print()
{
    if (day>0 && day<=31)
    {
        cout << "January " << day;
    };
    if (day>31 && day<=59)
    {
        cout << "February " << (day-31);
    };
    if (day>59 && day<=90)
    {
        cout << "March " << (day-59);
    };
    if (day>90 && day<=120)
    {
        cout << "April " << (day-90);
    };
    if (day>120 && day<=151)
    {
        cout << "May " << (day-120);
    };
    if (day>151 && day<=181)
    {
        cout << "June " << (day-151);
    };
    if (day>181 && day<=212)
    {
        cout << "July " << (day-181);
    };
    if (day>212 && day<=243)
    {
        cout << "August " << (day-212);
    };
    if (day>243 && day<=273)
    {
        cout << "September " << (day-243);
    };
    if (day>273 && day<=304)
    {
        cout << "October " << (day-273);
    };
    if (day>304 && day<=334)
    {
        cout << "November " << (day-304);
    };
    if (day>334 && day<=365)
    {
        cout << "December " << (day-334);
    };
} 
4

8 回答 8

3

这是错误的:

DayOfYear::DayOfYear(int numInput)
{
    numInput = day;
}

它应该是

    day = numInput;

否则day是未定义的,不会产生输出print

于 2013-07-26T06:52:02.553 回答
2

你的构造函数是错误的。

它应该是 :

DayOfYear::DayOfYear(int numInput){
    day = numInput;
}

您也可以使用初始化列表将您的代码变为此形状:

DayOfYear::DayOfYear(int numInput): day(numInput) {
}
于 2013-07-26T06:52:15.257 回答
1
DayOfYear::DayOfYear(int numInput)
{
    numInput = day;
}

应该

DayOfYear::DayOfYear(int numInput)
{
    day = numInput;
}
于 2013-07-26T06:51:55.487 回答
1

更改您的声明

DayOfYear::DayOfYear(int numInput)
{
    day=numInput;
}

除了使用上述方法,您还可以将 numInput 值传递给 print 函数,您可以直接检查您的条件。

于 2013-07-26T06:58:44.757 回答
1

DayOfYear::DayOfYear(int numInput) { numInput = day; }

问题是在构造函数的定义中,您将天的值分配给 numInput。所以它不会对对象的 day 字段的值产生任何影响。

解决方案:DayOfYear::DayOfYear(int numInput) { day = numInput; }

现在这个语句的意思是,将 numInput 的值分配给 day。

于 2013-07-26T06:54:13.370 回答
1

你有一个错误的分配

DayOfYear::DayOfYear(int numInput)
{
  numInput = day; //
}

你需要的是

DayOfYear::DayOfYear(int numInput)
  : day(numInput)
{}

使用初始化列表而不是赋值!

于 2013-07-26T06:54:43.883 回答
1

构造函数使用

numInput = day;

它应该在哪里:

day = numInput;

当然,这已经被指出了。我没有看到指出的是,您可以编写 DayOfYear::print 函数以使用链式 if...else if...else 语句,而不是一堆独立的 if 子句。这将使检查错误条件变得更容易,因此可能有助于调试。

例如,如果您有以下内容:

void DayOfYear::print()
{
    if (day>0 && day<=31)
    {
        cout << "January " << day;
    }
    else if (day>31 && day<=59)
    {
        cout << "February " << (day-31);
    }
    /* bunch more here else ifs here */
    else
    {
        cout << "That's not a date! Value of 'day' is " << day;
    }
}

然后可能更容易看出为什么事情会出错(在这种情况下:疯狂的值,因此可能是未初始化的东西)。

于 2013-07-26T07:13:20.213 回答
0

问题出在您的构造函数中。您根据变量的值打印结果day。但是你没有给这个变量分配任何值,所以你得到了一些垃圾值并且没有得到正确的答案。只需更改此代码部分

    DayOfYear::DayOfYear(int numInput)
    {
        numInput = day;
    }
to this:

    DayOfYear::DayOfYear(int numInput)
    {
        day = numInput;
    }

在你的打印功能中,我会建议使用else if而不是这么多if。这里我可以举个例子:

    if (day>0 && day<=31)
    {
        cout << "January " << day;
    }
    else if (day>31 && day<=59)
    {
        cout << "February " << (day-31);
    }
    else if (day>59 && day<=90)
    {
        cout << "March " << (day-59);
    }
    //and so on

最好使用它,因为如果您else if在获得真值时使用它,它将不会检查以下“else if”语句。但它在你的代码中,得到一个真值后,它会不必要地检查下面的if语句。

于 2013-07-26T08:24:29.720 回答