Почему мой цикл for, который должен найти произведение всех значений в массиве, продолжает сообщать мне каждое значение массива вместо этого?

0

Вот что у меня есть:

for (int x = 0; x < 20; x++) {
    double product = day_changes[0];
    if (x > 0) {
        product *= day_changes[x];
    }
    cout << product << ", ";
}

По сути, у меня уже есть массив, называемый "day_changes", который имеет значения. Я хочу умножить все значения в массиве вместе.

Я полагал, что у меня может быть продукт [0] = day_changes [0], но тогда я хотел, чтобы он работал так, чтобы продукт * day_changes [1] = продукт и т.д. Остальная часть массива.

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

Здесь вывод:

1, 1.0211, 1.00308, 0.99995, 0.999939, 0.995816, 1.00394, 0.999062, 0.998132, 1.00014, 0.995925, 0.9892, 1.0127, 0.995615, 1.00294, 0.992832, 0.999695, 1.02132, 0.996056, 1, 

Почему это происходит?

  • 1
    Этот цикл печатает «первый элемент в массиве» «текущий исследуемый элемент».
  • 2
    Вы сохраняете результат своего продукта внутри цикла, поэтому он всегда сбрасывается на первый элемент. (Затем вы умножаете его на текущий элемент.) Переместите его наружу: double product = 1 /* Empty product. */; for (...) .
Теги:
for-loop
multiplication

3 ответа

1

Инициализировать product до подходящего значения вне цикла: -

double product = 1.0;                    <<<<< Initialize it. 
for (int x = 0; x < 20; x++) 
        product *= day_changes[x];
cout << product;                         <<<<< yuppie I got correct value.
  • 0
    О Боже, я чувствую себя идиотом. Спасибо!
1

Вам нужно перенести первый и последний операторы вне цикла for. Вы повторно инициализируете продукт и печатаете его для каждого элемента массива.

0

Вы не можете получить доступ к переменной вне блока, где она создана. Просто объявляйте double product=1.0 перед циклом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню