【发布时间】:2012-04-20 19:45:35
【问题描述】:
可能重复:
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;
}
【问题讨论】:
-
“出于某种原因”?没有错误信息?我觉得……不太可能。当说某事“不起作用”时,请尝试包括实际发生的事情。在这种情况下,这很容易,但提出一个完整的问题只是常识和礼貌。
-
我在使用一次时没有收到错误消息,但是当我将它放入循环时会收到错误消息。这就是为什么我说“出于某种原因”。
-
别忘了真正的随机性是不存在的;它总是伪随机性并且在每次运行时生成相同的伪随机序列是一个特征。可能,对您的情况没有用,尽管我相信值得了解。
-
请注意,
rand()生成可重复/确定性序列的能力是有意的,有时很有用。通过根本不调用srand()或使用常量值调用它,序列每次都相同,这对于测试/调试很有用,当您可能不希望每次测试的行为都不同时。 -
如果您调用
time(),请不要忘记#include <time.h>,否则编译器将采用不同的原型并调用未定义行为。
标签: c random compilation