【发布时间】:2013-05-10 06:32:07
【问题描述】:
我的程序包含的代码应该在我每次执行时生成一个随机正整数。它生成随机数,但只生成一次。之后,当我执行相同的代码时,它给了我相同的值,这使我的代码无用。
我从 rand 函数开始,然后将 srand() 函数与 time.h 头文件一起使用,但仍然它不能正常工作。
#define size 10
for(i=0;i<size;i++)
Arr[i] = rand()%size;
第一次调用(随机):
6 0 2 0 6 7 5 5 8 6
第二次调用(随机但与之前相同):
6 0 2 0 6 7 5 5 8 6
后来我访问了 Stack Overflow 问题并阅读了有关 srand() 函数的信息,并将其用作:
#include<time.h>
for(i=0;i<size;i++)
Arr[i] = srand(time(NULL));
第一次通话:
-10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327
第二次通话:
-10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326
它给了我不同的(但不是随机值)。我已将 Arr[i] 定义为 unsigned int,但仍然得到负值。
【问题讨论】:
-
你种下种子了吗?使用时间函数设置种子。
-
您只需调用一次
srand即可为rand生成器播种。不要每次都拨打srand来获取您的号码 -
您可能应该阅读manpage,它解释了这些功能的工作原理,并提供了一个工作示例。
-
@Magn3s1um 我不知道你在说什么
-
您将种子设置为当前时间:srand(time(null))。然后你打电话给兰特。这样你每次都会得到一个独特的种子。种子改变了随机算法。你现在明白了吗?