为什么C++ rand函数输出的随机值超出了我设置的参数范围?
问题原因
- 数组越界访问,触发未定义行为
你定义的int array[] = {randomNumb}仅初始化了长度为1的int数组,只能存储1个元素。调用showArray(array, 25)时,函数会从数组起始地址开始向后读取25个int长度的内存,除第一个元素外,后续读取的都是栈上的无关垃圾数据,输出自然是异常的乱值。 - 未生成25个随机数,仅生成了1个有效随机值
你当前代码仅调用了1次rand()生成1个随机数,没有循环生成25个目标随机数的逻辑,也没有将生成的数存入数组对应位置的步骤。 - 随机数范围计算错误
你要生成3~7闭区间的随机数,共有5个合法取值,正确计算公式为rand() % 取值总数 + 区间最小值,也就是rand() %5 +3。你原来写的rand()%3 +4只能生成4、5、6三个值,本身就不符合需求,同时你还漏了time()函数依赖的<ctime>头文件。
修正后可运行代码
#include <iostream> #include <ctime> using namespace std; void showArray(int a[], const int size) { for (int i = 0; i < size; i++) { cout << a[i] << ", "; } } int main() { srand(time(NULL)); const int ARRAY_SIZE = 25; int array[ARRAY_SIZE]; // 循环生成25个符合要求的随机数存入数组 for(int i = 0; i < ARRAY_SIZE; i++){ array[i] = rand() % 5 + 3; } showArray(array, ARRAY_SIZE); return 0; }
内容的提问来源于stack exchange,提问作者Caleb Onuonga
相关产品推荐
相关产品推荐

