使用rand()函数循环生成随机数时每次输出相同数值如何解决
问题原因
rand() 本质是伪随机数生成函数,输出的随机序列完全由初始种子决定。你没有在程序启动时手动设置随机种子,系统会默认使用固定值1作为初始种子,因此每次运行程序时,rand() 生成的随机数序列完全相同,和你是否在循环中调用没有关系。
修复方案
你只需要在第一次调用rand()之前,全局执行一次种子初始化即可,通常用系统时间戳作为种子保证每次运行种子不同:
- 首先引入时间头文件:
#include <time.h>
- 在
main()函数的起始位置添加种子初始化代码:
srand((unsigned int)time(NULL));
注意事项
- 不要把
srand()放在循环或者PlayGame函数内部重复调用,整个程序生命周期内只需要调用1次即可。如果多次调用且间隔小于1秒,time(NULL)返回的时间戳相同,反而会导致生成的随机数重复。 - 你当前代码里的随机数生成逻辑得到的数值范围是
[Difficulty, 2*Difficulty - 1],如果这个范围符合你的业务预期就不需要调整,否则可以自行修改取模和偏移参数。
内容的提问来源于stack exchange,提问作者EmberMan
相关产品推荐
相关产品推荐

