【C语言】如何解决生成随机数时连续输出重复值的问题?
问题:生成10个随机数却输出重复值的解决方法
你的代码问题核心在于每次调用randint()都重复执行srand()初始化随机种子。time(NULL)返回秒级时间戳,循环的10次迭代在同一秒内完成,导致每次的种子值完全相同,rand()每次都会生成同一个初始随机数,所以输出全是重复值。
解决方法
把srand((unsigned)time(NULL))移到main()函数开头,仅在程序启动时执行一次,不要每次生成随机数都调用。
修改后的代码
#include <stdio.h> #include <stdlib.h> #include <time.h> int randint(void); int main(void) { // 仅初始化一次随机种子 srand((unsigned)time(NULL)); for (int i = 0; i < 10; i++) { printf("%d ", randint()); } return 0; } int randint(void) { return rand() % 81 + 10; }
补充说明
srand()的作用是设置随机数生成器的初始种子,相同种子会让rand()生成完全一致的随机数序列。- 程序运行期间只需要初始化一次种子,后续每次调用
rand()都会生成序列中的下一个随机数。 - 如果你的需求是生成完全不重复的10个数(而非允许重复的随机数),还需要额外做去重逻辑,比如将已生成的数存入数组,每次生成新数时检查是否已存在。从你的期望输出看,允许重复值,所以上述修改即可满足需求。
内容的提问来源于stack exchange,提问作者kongkong
相关产品推荐
相关产品推荐

