【发布时间】:2010-07-21 07:48:10
【问题描述】:
这段代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
printf ("First number: %d\n", rand() % 100);
srand ( time(NULL) );
printf ("Random number: %d\n", rand() % 100);
srand ( 1 );
printf ("Again the first number: %d\n", rand() %100);
return 0;
}
有以下输出:
First number: 41
Random number: 13
Again the first number: 41
还有如下规则:
使用相同种子的两个不同初始化,指示伪随机生成器在两种情况下为后续调用 rand 生成相同的连续结果。
我明白这些话,但我不明白方法本身。为什么它又返回了 41?它是随机的还是必须根据此代码在每种情况下都返回相同的结果?
【问题讨论】:
-
这使得调试更容易。如果您正常运行,请使用 srant(time(NULL))。如果您的程序中存在错误,请不要调用 srand() 或调用 srand(1),您将通过调用 rand() 获得相同的数字序列。请注意,每次调用 rand 都会生成序列中的下一个数字,但序列始终相同。注意 2:您应该只在应用程序中调用 srand() 一次。
-
@Martin York:好点子。从调试的角度从来没有想过这个。有道理。