在C ++中输出奇怪的大数

时间:2018-06-19 00:51:41

标签: c++ function vector

他是C ++的新手,他正在处理一个简单的问题,该问题需要一系列的Int并输出数字之和,而不是最小和最大的数字。

如果向量有一个元素或没有元素,那么它将返回0。 这是我的代码:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int test(vector<int> numbers) {

  typedef vector<int>::size_type vec_sz;
  vec_sz size = numbers.size();


  if (size <= 1) {
    cout << "Vector less than 2" << endl;
    return 0;
  } else {
    sort(numbers.begin(), numbers.end());

    int answer;
    for (int i=1; i < size-1; i++) {
        answer += numbers[i];
    }
    return answer;

  }

}

int main() {
    vector<int> vec = {2,1,3,4,6,5,7,9,8,10};
    cout << test(vec) << endl;

    vector<int> vec_2 = {1};
    cout << test(vec_2) << endl;

}

当我运行时,我会得到以下内容:

3829804
Vector less than 2
0

当向量为&gt;时,为什么我得到一个荒谬的大数字? 1,当它应该返回2-8的总和时

当我在没有检查带有1个或更少项目的向量的情况下制作程序时,我没有问题。谢谢你的帮助!

2 个答案:

答案 0 :(得分:4)

answer在您的函数中初始化,并且不确定值。
任何用法都将导致undefined behavior

int answer; // uninitialized
            // answer will have indeterminate value
for (int i=1; i < size-1; i++) {
    answer += numbers[i]; // undefined behavior
}
return answer;

根据dcl.init/12

  

如果为对象指定了 no 初始值设定项,则该对象默认初始化

  存储具有自动或动态存储持续时间的对象时   获得后,该对象具有不确定值,

所以只需初始化answer

int answer = 0;

答案 1 :(得分:0)

尝试在for for循环之前将答案设置为0。这应该可以解决问题,因为APU正在尝试将数字添加到未定义的数字。