初级C++硬件.函数似乎不起作用

Beginner C++ hw. Function doesnt seem to work

本文关键字:不起作用 函数 C++ 硬件 初级      更新时间:2023-10-16

我一直在做这个任务,希望我制作一个类,当用户输入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 << "nntPlease enter a day number between 1 and 365.nt";
    cin >> numInput;
    while ((numInput < 1) || (numInput > 365))
    {
        cout << "ntError* Please enter a number between 1 and 365.nt";
        cin >> numInput;
    };
    DayOfYear day1(numInput);
    //cout << "nntThat 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);
    };
} 

这是错误的:

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

应该是

    day = numInput;

否则,day未定义,这将不会在print 中产生输出

您的构造函数是错误的。

应该是:

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

你也可以使用一个初始化列表将你的代码变成这样:

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

应该是

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

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

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

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

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

您有一个错误的分配

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

你需要的是

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

使用初始值设定项列表而不是赋值!

更改申报

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

您也可以将numInput值传递给打印函数,而不是使用上面的方法,您可以直接检查您的条件。

构造函数使用

numInput = day;

应该在哪里:

day = numInput;

当然,这一点已经被指出了。我没有看到指出的一点是,您可以将DayOfYear::print函数编码为使用链式if…else if…els语句,而不是一堆独立的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;
    }
}

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

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

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

在您的打印功能中,我建议使用CCD_ 13,而不是这么多CCD_ 14。这里我可以举一个例子:

    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

最好使用此语句,因为如果在获得true值时使用else if,它将不会检查以下"else-if"语句。但在您的代码中,在获得一个true值后,它将不必要地检查以下if语句。