1

我试图理解 c 中的随机生成函数。

对于我所读到的函数返回的随机数取决于它的初始值,称为种子,对于程序的每次运行都保持相同。这意味着程序生成的随机数序列在程序的每次运行中将完全相同。

所以这是通过使用另一个函数来解决的——srand(seed) ——它将在每次运行时使用不同的种子值,每次运行都会产生一组不同的随机值。并且可以使用系统时钟来为这个随机数生成器提供任意值。总而言之:时间被用作种子值。

因此,在实现 srand(seed) 函数后,随机数生成 reallt 工作正常,但是 - 我不明白种子值总是相同的。我认为关于播种随机数生成器的整个想法是每次程序执行时使用一个新的种子值。但在 Eclipse 的控制台窗口中,种子值似乎每次都相同,即 4071056、4071056、4071056、4071056、4071056、4071056

以及生成的随机数,例如:1,6,5,5,1,4

http://www.cprogramming.com/tutorial/random.html获得信息

编辑: *我想我现在明白了。在 java 中,这将是 int 和 void 之间的不匹配错误,

int t = srand(time(NULL));
printf("seed value: %d \n", t);
int rand_nmbr = (rand() % 6 + 1);
printf("dice face: %d ", rand_nmbr);
4

2 回答 2

4

srand不返回值;它的原型是

void srand(unsigned int seed);

分配 to 的(不存在的)结果srandt一个编码错误;你只是在打印垃圾。

如果要查看种子使用的实际价值

time_t t;
time(&t);
srand(t);
于 2013-09-19T14:02:59.463 回答
0

srand()函数的void类型不返回任何内容。您的编译器应该为此给出错误

[Error] void value not ignored as it ought to be  

void通过将函数分配给变量来调用函数是错误的。

于 2013-09-19T14:04:38.447 回答