为什么当我尝试检查字段的值时,我得到一个奇怪的答案
Why am I getting a weird answer when I try to check the value of a field?
我在C++有这个小问题:
我在一个名为 angle.cpp 的文件中制作了一个名为 Angle
的对象。它有一个名为 degrees
的字段 类型 double
.
这是我的构造函数:
Angle::Angle(double deg)
{
degrees = deg;
}
我在单独的头文件中为我的 Angle 类提供了正确的声明作为标准。到目前为止,一切看起来都很简单。
但是在我的主要功能中.cpp我在我的一个功能中都有这个:
double value;
cin >> value;
Angle angle = Angle(value);
此时,angle
对象的degrees
应该具有我键入的任何值cin
对吗?
我还有另一个名为 getDegrees()
in angle 的函数.cpp它只返回任何degrees
,因为我在头文件中将degrees
设为私有
但是当我用cout << angle.getDegrees()
检查时,我得到了一个像6.64651e-315
这样的奇怪数字,这绝对不是我通过cin
给value
的。
你能检查(或在这里发布)getDegrees
的定义吗(这是可以期待的示例代码)
double Angle::getDegrees()
{
return degrees;
}
注意:与您的问题无关,但您的构造函数也可以编写为:
Angle::Angle(double deg) : degrees(deg)
{
}
我在Mac上做了这个:
#include <iostream>
class Angle
{
double degrees;
public:
Angle(double deg) { degrees = deg;}
Angle() {};
double getDegrees() { return degrees;}
};
int main (int argc, char** argv)
{
double d;
std::cout << "Give me some degrees: ";
std::cin >> d;
Angle a = Angle(d);
std::cout << a.getDegrees() << "n";
std::cout << Angle(d).getDegrees() << "n";
Angle b;
std::cout << b.getDegrees() << "n";
}
我得到了:
Give me some degrees: 24
24
24
6.95323e-310
所以我怀疑你从一个未初始化的角度得到度数。 您是否像这样定义复制构造函数,也许:
Angle(Angle& angle){};
两个建议:
1) 在声明"value"时初始化它,如下所示,这样它就不会包含随机代码。
2) 冲洗 cin 缓冲液:
double value = 0;
// Clear the cin error flag
cin.clear();
// Ignore to the end of line
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n')
cin >> value;
Angle angle = Angle(value);
我希望这有所帮助。
请注意,在使用 cin 之后,您应该调用 cin.clear(清除错误标志)和 cin.ignore (清除缓冲区),如下所示。 您可能在程序的前面读入了一些数据,但没有刷新缓冲区。 读取数据后不刷新缓冲区有时会将数据保留在下次读取数据时显示的 cin 缓冲区中。
例如,如果您尝试使用 cin 读取数据并生成错误,这将设置错误标志,导致所有将来的 cin 操作失败(cin.clear 重置该标志)。 此外,导致错误的数据可能仍位于 cin 缓冲区中(cin.ignore 将其清除)。
cin >> value;
cin.clear(); // Always call these two commands after using cin
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n')
最后一点评论:你经常会看到这种较短的格式 cin.ignore
cin.ignore(10000, 'n')
这也通过忽略最多 10000 个字符跳到下一个换行符,但上面显示的第一种方法是符合 C++ 标准的适当技术。
如果你发布你的整个主要.cpp和角度.cpp,我相信 10 个人会在 30 秒内跳上正确答案。
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 我的 cout 上有一个奇怪的输出,它把答案放在第一位,然后在我调用它的地方放一个奇怪的输出.我该怎么办?
- 尝试创建一个程序来查找非二叉树的高度.最终得到一个很长的循环,没有答案
- c++:运行一个函数 8 次,并将每个答案添加到数组或 JSON 中
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 欧拉项目#8:C++错误的答案(为一个小的炮制输入给出正确的答案)
- 通过Insertkey和BuildHeap的另一个建造一个堆,从一个堆堆中获得不同的答案
- 乘以十进制的倍数,给我一个小十进制答案,以回馈我的变量
- 为什么将浮点变量与另一个浮点变量的缩减为int给出了完全不同的答案
- 一个带有参数的程序,为什么此程序有错误的答案
- 为什么我的函数返回一个整数,尽管我已经将答案指定为浮点数
- 试图弄清楚如何使用递归来获得与另一个函数相同的答案
- 你如何得到一个方程,以十进制输出答案
- 创建一个程序,要求用户输入两个数字,并有三个可能的答案.代码未编译.数字(作为int)
- 在C++中,我如何提出一个只接受 2 个字母作为答案的问题
- 我正在尝试编写一个简单的计算程序,但答案一直返回为 0
- SPOJ 问题 ADDREV - 添加反转数字(考虑到我的代码,我得到了一个错误的答案,这很荒谬......
- 我如何让我的部分代码循环并重复一个问题,直到答案是有效的输入C++
- 我在C++中的搜索功能是提取所有答案,而不是一个答案
- 带有字符串的C++if语句只给出一个答案