可能重複:
rand function returns same values when called within a single function c++C++隨機數函數srand
我有這將創建一個新的隨機數集合每個鼠標點擊的程序。如果我沒有srand(time(NULL))運行程序;這些數字每次都是一樣的。如果我用srand(time(NULL))運行程序;那麼我可能會點擊垃圾郵件,這些數字會重複出現。我怎樣才能解決這個問題?
可能重複:
rand function returns same values when called within a single function c++C++隨機數函數srand
我有這將創建一個新的隨機數集合每個鼠標點擊的程序。如果我沒有srand(time(NULL))運行程序;這些數字每次都是一樣的。如果我用srand(time(NULL))運行程序;那麼我可能會點擊垃圾郵件,這些數字會重複出現。我怎樣才能解決這個問題?
你的問題是關於播種隨機數發生器具有相同的值。函數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的另一個示例。
cplusplus.com不僅不是官方的,它包含很多錯誤,因此在這裏不被重視。嘗試[cppreference.com](http://en.cppreference.com/w/),他們試圖堅持實際的標準。 – 2012-10-15 16:39:27
相應地修改它,thx。 – p1100i
rand
函數不是很擅長生成隨機數,看看boost::random
。這是真棒,可以創建隨機和半隨機數
使用'srand'一次。 – chris
在你的程序中調用'srand()'一次(也只能調用一次)。可能在啓動時。 – Cornstalks
「垃圾郵件點擊」是什麼意思? –