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

时间:2015-04-24 03:52:20

标签: c++ random

我正在开发一个程序,该程序使用一个函数生成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;

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

调用main中的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;

}