2015-04-24 97 views
-3

我正在使用一个函数,该函数会生成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部分,但这是我老师工作的一部分,所以我不确定是否需要触摸它。提前致谢。

+0

*您知道*此之前已经问... –

+0

@EricJ:虽然我同意,你所提供的链接是关于C#。更好的选择可能是http://stackoverflow.com/questions/7343833/srand-why-call-it-only-once –

+0

相同的确切问题。大多数语言事实上都有这个问题。随意投票结束作为你提供的一个副本。 –

回答

4

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

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

+0

我这么认为。猜猜我需要告诉我老师他搞砸了!谢谢您的帮助! – trungnt

2

你必须在你的程序只有一次种子,随机数生成,

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

现在种子它的功能get_rand_int内,并在很短时间内量的两倍调用该函数。种子结果是一样的,所以你得到相同的数字序列。

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; 

}