家庭作业:Cout错误地从类方法处理返回值0.0

时间:2011-10-06 07:25:34

标签: c++ double cout

首先,这是家庭作业,因此我无法为任何大小的数组动态分配内存,而且我无法使用 vector

我有一个类,其中包含一个包含30个元素的double数组,以及另外两个变量,用于跟踪已添加的元素数量以及可存储的最大元素数。

有几种方法可以从数组中的元素返回最高,最低,平均和总数。其中一种方法的一个例子是......

double Stats::sum() const
{
  double sum = 0.0;

  for (unsigned short i = 0; i < nElements; ++i)
    sum += stats[i];

  return sum;
};

在我的main()函数中,我有一个cout语句......

cout << "\nTotal rainfall for " << MonthlyRainfall.size() << " months is "
     << MonthlyRainfall.sum() << " inches.\n";

当数组中有值时,输出就是我期望的......

Total rainfall for 1 months is 1.5 inches.

但是,当数组中没有值时(方法返回0.0),但输出看起来像......

Total rainfall for 0 months is -1.$ inches.

任何人都可以帮助我理解cout语句中发生的事情是什么导致我的方法返回的0.0按原样输出?

注意:在main()函数的开头,执行以下语句以格式化十进制输出。 cout << fixed << showpoint << setprecision(1);


  

更新 的   我想它已经很晚了,我正在调用average()方法而不是sum()。我已修复它,你还指出我需要对平均方法进行一些更改,以确保不会发生除以0。 (=


3 个答案:

答案 0 :(得分:3)

除零被明确定义为正或负无穷大。默认情况下,显示为

Inf

-Inf

(至少在我的机器上)。

setprecison混淆了这一点,see this other question

答案 1 :(得分:2)

average()已将某事物除以零并得到负无穷大,这就是cout显示它的方式。

答案 2 :(得分:-1)

你没有显示平均方法,但我的猜测是你在那里做零除。随之而来的是古怪。