2017-06-12 36 views
-2

我想在我的ff類中創建一個單獨的函數來生成一個隨機數並返回該數。在循環外部使用時,該功能看起來很完美。但是,當我把函數放到一個循環中時,即使我每次調用隨機函數,它仍然會生成相同的數字!我究竟做錯了什麼?隨機函數在循環內調用時返回相同的數字! C++

//return a random number 
    int ff::random_number() const 
    { 
     srand((unsigned)time(NULL)); 
     return (rand() % 20 + 1); //in the range of 1 to 20 
    } 


    //creates an int list of random size and random elements 
    int ff::create_random_list() 
    { 
     list_length = random_number(); //the list size 
     list_of_numbers = new int[list_length]; //initilize the list 

     for (int i = 0; i < list_length; ++i) 
      list_of_numbers[i] = random_number(); //insert a random number 

     return 1; 
    } 
  • 注意:我已經檢查了被這個問題之前發佈的所有類似的問題,但沒有回答我的問題。只是要清楚。
+0

@Sneftel這是有用的,但不公平稱它是一個確切的重複! – Bader

+0

我假設(unisgned)時間(NULL)在循環內返回相同的值,因此您在每次循環迭代中將僞隨機數生成器設置爲相同的狀態,並且每次都會給出相同的僞隨機數(如預期的那樣) –

回答

1

您必須一次種子函數,而不是每次(在循環中使用函數時都會發生這種情況)。

所以這行:

srand((unsigned)time(NULL)); 

應執行一次。