初级C++硬件.函数似乎不起作用
Beginner C++ hw. Function doesnt seem to work
我一直在做这个任务,希望我制作一个类,当用户输入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
语句。
- C++为什么尽管我调用了void函数,它却不起作用
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 为什么我的数组双精度函数不起作用?
- 使用 va_arg 传递给函数va_list不起作用
- Windows.h 输入在函数之外不起作用
- 类和构造函数中的函数根本不起作用,并且不返回任何错误
- 类中的虚拟布尔函数参数不起作用
- getline 函数似乎在 C++ 中不起作用
- 将新放置与 std::函数一起使用不起作用
- binary_search() 函数在我的函数体中不起作用
- 为什么读取函数在 sha1 c++ 实现中不起作用?
- 在函数中声明的 ifStream 对象在发布模式下不起作用
- 指针变量在 cout 函数中不起作用
- std::函数不起作用,但普通的旧函数指针可以 - 为什么?
- C++ 函数,用于查找数组中四个最小最大元素的总和不起作用
- 为什么必须使用'*p=a',而使用'p=&a'在构造函数中不起作用
- C++ Arduino - 随机函数不起作用
- QObject::连接不起作用 - 使用函数语法找不到信号
- 函数在类中不起作用-函数调用缺少参数列表