我对C有些新手,但我遇到过各种不同语言的同样问题。当使用srand(time(NULL))生成随机数时,这些值在第一次出现时很好,但在此之后的任何时间它都保持相同的值。我尝试将所有变量重置为上面的新值,无效。
while(Ui <= (uInput - 1))
{
printf("Input answer %d: ", (Ui + 1));
scanf("%d", &answers[Ui]);
Ui++;
srand(time(NULL));
a = (rand() % 25 + 1) - (rand() % 25 + 1);
b = (rand() % 25 + 1) - (rand() % 25 + 1);
c = (rand() % 25 + 1) - (rand() % 25 + 1);
d = (rand() % 25 + 1) - (rand() % 25 + 1);
e = (rand() % 25 + 1) - (rand() % 25 + 1);
f = (rand() % 25 + 1) - (rand() % 25 + 1);
g = (rand() % 25 + 1) - (rand() % 25 + 1);
h = (rand() % 25 + 1) - (rand() % 25 + 1);
i = (rand() % 25 + 1) - (rand() % 25 + 1);
j = (rand() % 25 + 1) - (rand() % 25 + 1);
}
这个想法是打印掉多个10变量方程,变量a-j代表方程中每个变量的系数。问题在于,无论我做什么,它每次都生成并打印相同的等式,它不会将新的随机值重新分配给变量。
作为旁注,我知道我的代码现在看起来并不像它完成任何事情,但这只是我复制,粘贴和修改的片段,因此您可以看到我分配随机值的方法。
我非常感谢任何帮助,反馈或支持。
答案 0 :(得分:6)
将srand(time(NULL));
移到while
循环之外。
time(NULL)
返回time_t
结构,该结构正在转换为unsigned int
(原型:void srand( unsigned seed );
),存储自纪元以来的总秒数:00:00 :世界协调时间(UTC),1970年1月1日,星期四。
循环执行速度很快,因此每个srand(time(NULL))
都在同一秒内进行评估。