C编程中的rand()问题?

时间:2012-04-07 16:29:27

标签: c random compilation

  

可能重复:
  Why do I always get the same sequence of random numbers with rand()?

所以,是的,这可能看起来有点愚蠢,但是因为我在Java上变得合理后自学C,我已经遇到了一些麻烦。我正在尝试在C中使用rand()函数,但我只能调用它一次,当它执行时,它总是生成相同的随机数,即41。我正在使用Microsoft Visual C ++ 2010 Express,并且我已经设置它以便编译C代码,但唯一不起作用的是这个rand()函数。我尝试过包含一些常用的库,但没有任何作用。这是代码:

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"

int main(void)
{
    printf("%d", rand()); //Always prints 41

    return 0;
}

5 个答案:

答案 0 :(得分:4)

这是因为rand()始终从执行开始时的同一点初始化其伪随机序列。

在使用rand()获取不同的值之前,您必须输入一个非常随机的种子。这可以通过函数srand完成,函数将根据传递的种子移动序列。

尝试:

srand(clock());   /* seconds since program start */
srand(time(NULL));   /* seconds since 1 Jan 1970 */

答案 1 :(得分:3)

你必须播种rand()

srand ( time(NULL) );通常用于初始化随机种子。否则,

答案 2 :(得分:2)

在调用rand()之前需要一个种子。尝试拨打“srand (time (NULL))

答案 3 :(得分:2)

您必须首先使用srand()初始化随机种子。

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"

int main(void)
{
    srand(time(NULL)); // Initialise the random seed.
    printf("%d", rand());
    return 0;
}

答案 4 :(得分:1)

rand()提供随机值,但您需要先将其播种。问题是如果你多次(可能)执行你的代码,使用相同的种子srand(time(NULL)),那么rand();会给出相同的价值。

然后,第二个选项是执行,如Thiruvalluvar所说,srand(time(NULL))然后rand()

上面的那个将给你1000个随机数。尝试执行此代码,看看会发生什么:

srand (time(NULL));
for (int i=0; i<1000; i++)
    {
    printf ("Random number: %d\n", rand());
    }

希望它有所帮助!