2015-04-24 83 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; 

}