首页 > 解决方案 > 当向量有 6 个元素(C++、向量、循环)时,程序打印异常数字

问题描述

我正在进入编码领域,并且一直在 Codecademy 学习一些 C++。我编写了以下代码作为使用向量练习的一部分,我必须编写一个程序来查找向量中偶数的总和和奇数的乘积

#include <iostream>
#include <vector>

int main() {

  //Declaring variables
  int i, sum = 0;
  int product = 1;
  std::vector<int> example = {2,4,3,6,1,8};

  //Loop for calculations
  for (i = 0; i <= example.size(); i++)
    {

        if (example[i] % 2 == 0)
        {

            sum = sum + example[i];

        }

        else

        {

            product = product * example[i];

        }

    }

  std::cout << "Sum of even numbers: " << sum << "\n";
  std::cout << "Product of odd numbers: "<< product << "\n";

}

这段代码的关键在于,奇数乘积的输出是 396147。

删除第 6 个元素会产生正确的结果,因为我看到的输出是 3(这是我无论如何都应该得到的输出,因为我没有更改向量中奇数的数量)。

同样,添加元素也会让程序打印正确的数字,这让我认为每当我正好有 6 个元素时,计算向量中奇数的乘积就会出现问题。

请注意,无论元素的数量如何,计算向量中偶数的总和仍然是合适的。

不同向量的输出示例:

具有 6 个元素的向量:std::vector example = {2,4,3,6,1,9}; -> 奇数乘积的输出是 3565323。

std::vector 示例 = {2,4,3,6,1,5}; -> 奇数乘积的输出是 1980735。

具有 5 个元素的向量:std::vector example = {2,4,3,6,1}; -> 奇数乘积的输出是 3。

具有 7 个元素的向量:std::vector example = {2,4,3,6,1,4,8}; -> 奇数乘积的输出是 1980735。

知道为什么会这样吗?谢谢。

标签: c++for-loopvectoroutput

解决方案


应该是for (i = 0; i < example.size(); i++)因为数组/向量索引从开始0并且最后一个条目具有 index size()-1


推荐阅读