2

可能重复:
为什么我总是用 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;
}
4

5 回答 5

4

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

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

尝试:

srand(clock());   /* seconds since program start */
srand(time(NULL));   /* seconds since 1 Jan 1970 */
于 2012-04-07T16:32:15.727 回答
3

你必须播种rand()

srand ( time(NULL) );通常用于初始化随机种子。除此以外,

于 2012-04-07T16:31:39.760 回答
2

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

于 2012-04-07T16:31:49.550 回答
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;
}
于 2012-04-07T16:33:43.687 回答
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());
    }

希望能帮助到你!

于 2012-04-07T16:41:23.890 回答