2012-10-13 203 views
1

可能重複:
rand function returns same values when called within a single function c++C++隨機數函數srand

我有這將創建一個新的隨機數集合每個鼠標點擊的程序。如果我沒有srand(time(NULL))運行程序;這些數字每次都是一樣的。如果我用srand(time(NULL))運行程序;那麼我可能會點擊垃圾郵件,這些數字會重複出現。我怎樣才能解決這個問題?

+7

使用'srand'一次。 – chris

+6

在你的程序中調用'srand()'一次(也只能調用一次)。可能在啓動時。 – Cornstalks

+1

「垃圾郵件點擊」是什麼意思? –

回答

4

你的問題是關於播種隨機數發生器具有相同的值。函數srand用於爲它初始化所謂的「種子」。一個種子可以用來在一個序列中產生相同的隨機數。

首先,您需要初始化生成器,然後只需調用不帶參數的rand函數,它將生成隨機數。例如:

/* initialize random seed with actual date-time */ 
    std::srand(std::time(NULL)); 

    /* generate ten random number lower than 10 */ 
    int random, times = 10; 
    while(times){ 
    random = std::rand() % 10; 
    times--; 
    } 

關於「惡意點擊」:std::time(NULL)在秒的精度,所以你初始化具有相同值的隨機種子,如果在同一秒鐘內點擊。

以下是on the official c++ reference網站的示例, 以及cplusplus.com的另一個示例。

+2

cplusplus.com不僅不是官方的,它包含很多錯誤,因此在這裏不被重視。嘗試[cppreference.com](http://en.cppreference.com/w/),他們試圖堅持實際的標準。 – 2012-10-15 16:39:27

+0

相應地修改它,thx。 – p1100i

0

rand函數不是很擅長生成隨機數,看看boost::random。這是真棒,可以創建隨機和半隨機數