2016-12-02 282 views
-4

我想在C中做一個隨機數發生器 - 與使用它的標準庫進行Java相比,出奇地難得多。隨機數發生器產生相同的隨機數

這是我的代碼。現在它可以工作,但是每次我編譯和運行時,我都會得到相同的隨機數。所以這些數字是隨機的,只是他們不改變每個方法調用。這是我需要的東西!

此方法在每次調用方法時都應返回不同的數字。

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 

void generateRandomNumber() 
{ 
    srand(time(NULL)); 
    //i tried rand() but thats worse all the numbers are the same 33,33,33 etc 
    int randomNumber = random() % 100; 
    printf("%d\n", randomNumber); 
} 

int main() 
{ 
    for (int i = 0; i < 100; i++) 
     generateRandomNumber(); 

} 
+1

只有你進入循環之前播種一次,,在'main'。並且'void srand(unsigned int seed);'函數聲明不需要存在,它應該包含在'time.h'頭文件中。循環將執行得如此之快,以至於您每次都使用相同的時間值(以秒爲單位)播種它,因此您可以得到相同的隨機數。你可能會得到_超級幸運一次,秒數會在你的循環中間翻轉,但是你會得到2個值。 – yano

+0

@ yano它應該包括,但是當我編譯與GCC它告訴我它應該。我嘗試在主要播種一次,所以你說移動srand(時間(空));主要?我試過沒有區別 – Mark

+0

我相信這個調用是'rand()',不知道'random()'是什麼。你也不需要'int rand(void);'函數聲明。檢查這個笨蛋,它會讓你走上正軌。 – yano

回答

0

確保你是唯一的種子一旦:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main() 
{ 
    int i; 
    time_t t; 

    srand((unsigned) time(&t)); 
    for(i = 0 ; i < 100 ; i++) { 
     printf("%d\n", rand() % 100); 
    } 

    return(0); 
} 
+0

你想讓我替換srand(time(NULL));與srand((無符號)的時間(&t));以及沒有做任何不同的事情 – Mark

+0

我的整個問題是當我在一個方法中使用它你不能只是刪除randomNumberGenerator方法,並說哦這是一個答案,我想要的方法。沒有辦法就能做到這一點 - 這很容易 – Mark

+0

@mark種子需要在方法調用之外,問題是這個方法的調用非常迅速,時間在調用之間沒有改變,所以你是 –