所以我正在创建一个程序,它会调用一个函数并返回 0 或 1(0 表示反面,1 表示正面),然后用它来打印 100 次翻转的结果。
我认为我可以使用 srand(time(NULL)) 来为 rand() 提供不断变化的种子,这似乎很简单。这是我的第一个裂缝。
#include <stdio.h>
#include <stdlib.h>
int flip();
int main(void) {
int heads = 0;
int tails = 0;
for (short int count = 1; count <= 100; ++count) {
int number = flip();
if (number == 0) {
printf("%s", "Tails");
++tails;
}
else if (number == 1) {
printf_s("%s", "Heads");
++heads;
}
}//end for
printf_s("\n%d Tails\n", tails);
printf_s("%d Heads", heads);
}//end main
int flip(void) {
srand(time(NULL));
int number = (int)rand();
printf("%d", number%2);
return number%2;
}//end flip
我将运行该程序,我的 rand() 值将始终是在 for 语句的每次迭代中重复的五位整数(即 15367、15745 或 15943)。
我一直在搞乱,直到我发现将 srand(time(NULL)) 更改为 srand(time(NULL)*time(NULL)/rand()) 可以解决问题。
我唯一的想法是每次迭代之间的时间非常小,srand() 函数的 time(NULL) 部分没有足够的变化来提供不同的种子值。
我也尝试过 srand(time(NULL)/rand()),但是,每次运行程序(20+次)时,都会产生相同的结果(52 头 48 尾);然而,rand() 值彼此不同。
我不知道为什么会发生这些事情,也不知道为什么最终的 srand(time(NULL)*time(NULL)/rand()) 函数起作用,如果有人可以解释,我会很高兴!