C++向vector push_back随机数时输出异常值如何修复
错误原因
- 结构体
funcs的成员变量sum未初始化:C++中栈上实例化的结构体普通内置类型成员不会默认清零,初始值是内存残留的随机垃圾值,你在该值基础上累加自然会得到异常输出。 srand调用语法错误:代码中的srand;仅获取函数地址,并未实际执行随机种子初始化的逻辑,需要补充括号和入参才会生效,不过这不是本次异常输出的核心诱因,但属于需要修正的代码问题。- 若你的需求是计算vector内所有元素的和,当前循环中
sum += 1的逻辑错误,仅能统计元素个数,需要改为累加元素本身的值。
修正后的代码
#include <iostream> #include <vector> #include <string> #include <stdlib.h> #include <ctime> // 引入时间头文件用于生成随机种子 using std::string; using std::endl; using std::cout; using std::cin; struct funcs { std::vector<int> values; int sum = 0; // 显式初始化sum为0 void createVectorValues(){ while(values.size() < 100) { int x = rand() % 100; values.push_back(x); } for(int& a : values) { // 若要统计元素个数保留sum +=1,若要计算总和改为sum += a sum += a; } cout << sum; } }; int main() { srand(time(nullptr)); // 正确调用srand,传入时间作为随机种子 funcs myFunct; myFunct.createVectorValues(); }
核心修改点说明
- 给
sum成员添加了默认初始值0,避免累加垃圾值 - 修正了
srand的调用逻辑,引入<ctime>头文件用系统时间作为随机种子,保证每次运行生成的随机数序列不同 - 如果你原本的需求是统计vector元素个数,把循环内的语句改回
sum += 1即可,执行后会输出100,属于正常结果。
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

