Домашнее задание: Cout неправильно обрабатывает возвращаемое значение 0.0 из метода класса - PullRequest
4 голосов
/ 06 октября 2011

Во-первых, это домашняя работа, поэтому я не могу динамически распределять память для массива любого размера, и я не могу использовать vector.

У меня есть класс, который включает в себя массив double, содержащий 30 элементов, и две другие переменные для отслеживания количества добавленных элементов и максимального количества элементов, которые можно сохранить.

Есть несколько методов, которые возвращают самое высокое, самое низкое, среднее и общее из элементов в массиве. Примером одного из методов является ...

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);


Обновление Я думаю, что было поздно, и я вызывал метод среднего () вместо sum (). Я исправил это, и вы также указали, что мне нужно было внести пару изменений в усредненный метод, чтобы деление на 0 не происходило. (=


Ответы [ 3 ]

3 голосов
/ 06 октября 2011

Деление на ноль четко определено как положительная или отрицательная бесконечность.По умолчанию это отображается как

Inf

или

-Inf

(по крайней мере, на моей машине).другой вопрос .

2 голосов
/ 06 октября 2011

average() разделил что-то на ноль и получил минус бесконечность, и вот как cout отобразил это.

0 голосов
/ 06 октября 2011

Вы не смогли показать средний метод, но я предполагаю, что вы делите там на ноль. Наступает дурачество.

...