2016-12-02 233 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种子需要在方法调用之外,问题是这个方法的调用非常迅速,时间在调用之间没有改变,所以你是 –