在C++中输出奇怪的大数字
Outputting weirdly large number in C++
嘿,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
为什么当向量> 1 时,当它只应该返回 2-8 的总和时,我得到一个荒谬的大数字?
当我在没有检查包含 1 个或更少项目的向量的情况下制作程序时,我没有问题。感谢您的任何帮助!
answer
未在函数中初始化,并且具有不确定的值。
任何用法都会导致未定义的行为。
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:
如果未为对象指定初始值设定项,则默认初始化该对象。
存储
具有自动或动态存储持续时间的对象时 获得,对象具有不确定的值,
所以只需初始化answer
:
int answer = 0;
尝试在 for 循环之前将答案设置为 0。这应该可以解决问题,因为 APU 正在尝试将数字添加到未定义的数字。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 将数字打印成文字
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 在将数字随机生成为数组期间从内存输出随机数的数组