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