C++ 将对象int数据成员转换为浮点和除法会将奇怪的数据cout附加到控制台
我肯定我做错了什么,但我就是想不出来。我已经创建了一个包含整数数据成员的对象,我想让一个成员函数以浮点值的形式返回其成员的商,它会这样做。然后,它会附加一些额外的内容。输出低于程序,程序应按原样运行C++ 将对象int数据成员转换为浮点和除法会将奇怪的数据cout附加到控制台,c++,object,math,output,C++,Object,Math,Output,我肯定我做错了什么,但我就是想不出来。我已经创建了一个包含整数数据成员的对象,我想让一个成员函数以浮点值的形式返回其成员的商,它会这样做。然后,它会附加一些额外的内容。输出低于程序,程序应按原样运行 #include <iostream> #include <string> #include <cstdlib> using namespace std; class Rational { public: explicit Rational(int =
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
class Rational
{
public:
explicit Rational(int = 0, int = 1);
double getRationalAsDouble() const;
private:
int numerator;
int denominator;
};
Rational::Rational(int numerator, int denominator)
{
if (denominator == 0)
this->denominator = 1;
else
this->denominator = denominator;
this->numerator = numerator;
}
// ******* Problem Function *********
double Rational::getRationalAsDouble() const
{
double a = 0.0, b = 0.0;
a = static_cast<double>(numerator);
b = static_cast<double>(denominator);
cout << endl << "a = " << a;
cout << endl << "b = " << b;
cout << endl << "a/b = " << (a/b);
}
// ******** End Problem Function ********
int main()
{
{ //Create a new Scope so that I can view Destructor Message, not used here
Rational c(2, 6);
int data = 10;
cout << c.getRationalAsDouble(); // prints rational object c as double, but not really
cout << "\n\n";
} // End of Scope
return 0;
} // end main
我一直在玩,如果我把函数改成有规则的除法,它就可以正常工作了。真正有趣的是,如果我在cout三个问题之后添加任何输出:
- 您希望在行尾打印endl,而不是在“开始”处。您的代码最终(有效地)解决了三个问题:
- 您希望在行尾打印endl,而不是在“开始”处。您的代码最终(有效地)解决了三个问题:
- 您希望在行尾打印endl,而不是在“开始”处。您的代码最终(有效地)解决了三个问题:
- 您希望在行尾打印endl,而不是在“开始”处。您的代码最终(有效地)执行
cout您的
实现可以简化为:Rational::getRationalAsDouble()
double Rational::getRationalAsDouble() const { return 1.0*numerator/denominator; }
我认为您在那里还有其他一切用于调试目的,因此并不真正需要。您对
的实现可以简化为:Rational::getRationalAsDouble()
double Rational::getRationalAsDouble() const { return 1.0*numerator/denominator; }
我认为您在那里还有其他一切用于调试目的,因此并不真正需要。您对
的实现可以简化为:Rational::getRationalAsDouble()
double Rational::getRationalAsDouble() const { return 1.0*numerator/denominator; }
我认为您在那里还有其他一切用于调试目的,因此并不真正需要。您对
的实现可以简化为:Rational::getRationalAsDouble()
double Rational::getRationalAsDouble() const { return 1.0*numerator/denominator; }
我认为您在那里还有其他的一切是为了调试目的,因此并不真正需要。推荐的链接没有回答这个问题。我将两个浮点数相除,并在最后得到期望值和附加的垃圾值。我应该看到
,没有附加a/b=0.3333333 2
。建议的链接无法回答问题。我将两个浮点数相除,并在最后得到期望值和附加的垃圾值。我应该看到.31196e-317
,没有附加a/b=0.3333333 2
。建议的链接无法回答问题。我将两个浮点数相除,并在最后得到期望值和附加的垃圾值。我应该看到.31196e-317
,没有附加a/b=0.3333333 2
。建议的链接无法回答问题。我将两个浮点数相除,并在最后得到期望值和附加的垃圾值。我应该看到.31196e-317
,但没有附加a/b=0.3333333 2
。谢谢!我不敢相信回归才是问题所在。我最初将其实现为.31196e-317
cout static_cast(分子)/分母代码>,但显然问题仍然存在,因为它没有返回任何内容。我使用的是Dev-C++,如果我不返回值,它不会使我感到温暖。我已经慢慢地转到VisualC++,这是更好的,但我一直有一个问题,今天,所以就回到老贝琪。再次感谢你,我感谢你的时间!您可能必须启用编译器警告。Dev-C++似乎是用GCC编译的;我建议从
开始。编译器不需要诊断缺少的返回值(通常,要准确地诊断,他们必须解决停止问题)。但是,能够在这样简单的情况下做到这一点是一个很好的QoI问题。非常好的建议,谢谢tc.,我会研究它,只要我时不时地使用Dev-C++就可以让它发现更多问题。而且,你说得很对,马特,我在发帖前挣扎了几个小时。因为这是一个退货问题,我真的很难过。谢谢你!我不敢相信回归才是问题所在。我最初将其实现为-Wall-Wextra-Wformat=2-Wno unused parameter
cout static_cast(分子)/分母代码>,但显然问题仍然存在,因为它没有返回任何内容。我使用的是Dev-C++,如果我不返回值,它不会使我感到温暖。我已经慢慢地转到VisualC++,这是更好的,但我一直有一个问题,今天,所以就回到老贝琪。再次感谢你,我感谢你的时间!您可能必须启用编译器警告。Dev-C++似乎是用GCC编译的;我建议从
开始。编译器不需要诊断缺少的返回值(通常,要准确地诊断,他们必须解决停止问题)。但是,能够在这样简单的情况下做到这一点是一个很好的QoI问题。非常好的建议,谢谢tc.,我会研究它,只要我时不时地使用Dev-C++就可以让它发现更多问题。而且,你说得很对,马特,我在发帖前挣扎了几个小时。因为这是一个退货问题,我真的很难过。谢谢你!我不敢相信回归才是问题所在。我最初将其实现为-Wall-Wextra-Wformat=2-Wno unused parameter
cout static_cast(分子)/分母代码>,但显然问题仍然存在,因为它没有返回任何内容。我使用的是Dev-C++,如果我不返回值,它不会使我感到温暖。我已经慢慢地转到VisualC++,这是更好的,但我一直有一个问题,今天,所以就回到老贝琪。再次感谢你,我感谢你的时间!您可能必须启用编译器警告。Dev-C++似乎是用GCC编译的;我建议将
-Wall-Wextra-Wformat=2-Wno未使用的参数作为起点。不需要编译器来诊断MSI
- 您希望在行尾打印endl,而不是在“开始”处。您的代码最终(有效地)执行
- 您希望在行尾打印endl,而不是在“开始”处。您的代码最终(有效地)解决了三个问题:
- 您希望在行尾打印endl,而不是在“开始”处。您的代码最终(有效地)解决了三个问题: