我有一个简单的程序可以在 C 中生成 N 对随机数。
我正在使用rand()
这个。N 的值是一个命令行参数。
我注意到当传递的命令行 arg 相同时,它总是生成相同的数字流。
rand()
联机帮助页说,如果没有明确的种子,RNG 将通过值 1 隐式播种(在我的程序中没有调用)srand()
。
然而,当我用 arg=10 和 arg=12 调用我的程序时,我应该看到两个序列的前 10 位是相等的,对吧?(他们都将使用相同的种子,即 1)。这没有发生。看起来种子是从隐式传递的 arg 派生和应用的,但这似乎不太可能。有任何想法吗?
更新: [抱歉没有早点发布]
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int objs=100, i;
if (argc >= 2)
objs = atoi(argv[1]);
for(i=0; i<objs; i++){
int p = rand() % objs;
int q = rand() % objs;
printf("%d %d\n", p, q);
}
return 0;
}
我正在使用 Ubuntu 12 和 gcc 4.7.2。