2009-06-11 97 views
0

我只是潛入一些C++,我決定做一個隨機數發生器(數字是多麼隨意,它真的沒關係)。大多數代碼被複制,然後網絡,但我的新手眼睛看不出有什麼問題,有沒有什麼辦法可以調整每次給「6」以外的數字?我的隨機數發生器有什麼問題?

#include <iostream> 
#include <string> 
#include <cstdlib> 

using namespace std; 
int random_number(int min, int max) 
{ 
    srand((unsigned)time(0)); 
    int random_num; 
    int range=(max-min)+1; 
    random_num = min+int(range*rand()/(RAND_MAX + 1.0)); 
    return random_num; 
} 
int main() 
{ 
    for(int i =0;i < 100;i++) 
    { 
      cout << random_number(3,10) << endl; 
    } 
} 
+2

如果你只種一次會發生什麼?即將srand移動到主函數中的循環之前? – dreamlax 2009-06-11 05:05:58

回答

4

添加函數srand循環

srand((unsigned)time(0)); 
    for(int i =0;i < 100;i++) 
    { 
     std::cout << random_number(3,10) << endl; 
    } 
4

不要在random_number()內調用srand()。這將在每次呼叫時爲隨機數發生器重新播種。對於100個電話,您很可能在每次通話時獲得相同的種子,因此也可能獲得相同的號碼。

2

之前的問題是,你用函數srand每次。 CPU速度很快,它會在一秒鐘內執行所有這些代碼,所以每次都會得到相同的種子。

將srand移出循環,只調用一次。