【发布时间】:2022-01-02 10:52:33
【问题描述】:
我正在尝试编写一个 void 函数,该函数在两个参数之间接受 50 个随机数并分配给一个数组以进行作业。输出给了我一堆 0 和奇怪的数字,比如 4254585 或 11277136,我该如何解决这个问题。
#include <time.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void rndnums(int max ,int min, int arr[50])
{
int rnd;
srand(time(NULL));
for(int i=0; i<50; i++)
{
rnd = rand() % max + min;
arr[i] = rnd;
}
}
int main()
{
int arr[50];
rndnums(30, 10, &arr[50]);
for(int i=0; i < 50; i++)
cout << i + 1 << ". = " << arr[i] << endl;
}
【问题讨论】:
-
这是未定义的行为:
&arr[50] -
试试
rndnums(30, 10, arr);,尽量不要猜测语法。 -
另外,
srand(time(NULL));只能在main()中调用一次。 -
rnd = rand() % max + min;这个公式是错误的:只考虑min=1000和max=1001的情况:这个表达式产生的最大值是min + (max-1) = 2000 > 1001 = max。您需要改用rnd = rand() % (max - min + 1) + min;(假设两个边界都包含在所需范围内) -
C++ 通过标准库提供了比 C 更多的功能;恕我直言,最好使用此功能:en.cppreference.com/w/cpp/numeric/random