【发布时间】:2021-04-23 07:44:44
【问题描述】:
我喜欢通过乱搞代码来学习,最近我复制并粘贴了一个随机数生成器代码。然后我删除了所有不是“必要”的代码行,以使可执行文件能够生成随机数。最后一根稻草是我从 srand 中删除“时间”。
srand((无符号)时间(0));
这里的“time(0)”是什么意思?
它是否使用程序打开的时间来生成随机数的种子?这就是为什么删除它(时间)使它不起作用的原因吗?因为那它没有种子?
还有……
include <stdlib.h>
include <stdio.h>
include <time.h>
int main()
{
srand((unsigned) time(0));
printf("Your dice has been rolled! You got:");
int result = 1 + (rand() % 20);
printf("%d", result);
}
这就是整个代码,我注意到它使用“rand”结果作为输出。 “rand”会从“srand”中拉出种子吗?
【问题讨论】:
-
您应该能够自己弄清楚:只需运行您的程序几次,使用和不使用 srand,然后看看您是否可以自己找出答案。它应该是可行的。当您看到结果时,答案应该非常明显。
-
传递给 srand 的种子不一定是 time(0) - 它可以是每次调用 srand 时不同的任何值。当前时间每次都不同,但您也可以要求用户输入一个随机数(假设您相信它们是随机的),或者您可以计算日志文件中的行数(假设您相信它总是改变)或其他东西。不需要您做任何工作的最简单的事情是当前时间,这就是为什么经常使用 time(0)。
-
man 2 time ???
-
只是在这里指出 rand() 的随机性足够有趣,但您可能需要更好的东西来进行严肃的工作。