我的随机数生成器正在打印重复的数字

My random number generator is printing duplicate numbers

本文关键字:数字 打印 随机数生成器 我的      更新时间:2023-10-16

我正在开发一个程序,该程序使用一个函数,该函数将生成 2 个随机整数,稍后我将使用这些整数来要求用户添加并计算总和。目前,我遇到了一个问题,其中它重复了相同的数字。

这是到目前为止的程序:

#include<iostream>
#include<ctime>
using namespace std;

/*
This function generates a random integer
between 0 and max_int
*/
int get_rand_int(int max_int){
    srand(time(0));
    return int(rand()) % max_int;
}

This program generates random addition problems
with integers between 0 and 100

int main(){
    int num1 = get_rand_int(101);
    int num2 = get_rand_int(101);
    cout << num1 << endl;
    cout << num2 << endl;

请注意,这是我老师布置的家庭作业问题。他为我们提供了骨架,我们正试图填补空白。我有一种感觉,问题出在我的职能的srand部分,但这是我老师工作的一部分,所以我不确定我是否需要触摸它。提前谢谢。

是的。 srand 使用 time 的结果初始化随机序列。但是,time每秒只能更改一次!这意味着,如果您在一秒的延迟内调用函数两次,则会得到相同的数字。

一种解决方案是在程序开始时(例如,在main函数中)只调用srand一次。

您必须在程序中仅播种一次随机生成器,

srand(time(0)); // this must happen only once, at the beginning of main()

您现在在函数get_rand_int中播种它,并在很短的时间内调用该函数两次。种子最终是相同的,所以你会得到相同的数字序列。

在主中调用 srand(time(0)) 以仅设置一次当前时间以立即使用随机生成。

int main(){
srand(time(0));
int num1 = get_rand_int(101);                          
int num2 = get_rand_int(101);
cout << num1 << endl;
cout << num2 << endl;

}