初学者C ++ hw。功能似乎不起作用

时间:2013-07-26 06:49:03

标签: c++ class function

我一直致力于这项任务,希望我创建一个类,当用户输入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);
    };
} 

8 个答案:

答案 0 :(得分:3)

这是错误的:

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

应该是

    day = numInput;

否则day未定义,不会在print

中产生输出

答案 1 :(得分:2)

你的构造函数错了。

应该是:

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

此外,您可以使用初始化列表将代码转换为此形状:

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

答案 2 :(得分:1)

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

应该是

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

答案 3 :(得分:1)

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

问题在于,在构造函数的定义中,您要为numInput分配day的值。因此它不会对对象日场的价值产生任何影响。

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

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

答案 4 :(得分:1)

你有错误的作业

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

您需要的是

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

使用initializer list代替分配!

答案 5 :(得分:1)

更改声明

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

您也可以将numInput值传递给print函数,而不是使用上述内容,您可以直接检查条件。

答案 6 :(得分: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;
    }
}

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

答案 7 :(得分: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语句。