C语言中rand()函数每次调用返回相同数值的问题求助
C语言rand()返回相同值问题成因及修复
核心问题成因
srand()函数是用来初始化随机数生成器种子的接口,整个程序运行周期内只需要调用1次即可,你将其放在randomNum自定义函数内部,每次调用随机数函数都会重新触发种子初始化。time(NULL)返回的是精度为秒的Unix时间戳,你连续4次调用randomNum的间隔远小于1秒,每次传入srand()的种子值完全一致。相同种子必然生成完全相同的随机数序列,每次初始化后第一次调用rand()都会取到序列的第一个值,因此四次输出结果完全相同。
修复方案
将srand(time(NULL))移到main函数最开头,仅在程序启动时初始化一次种子即可,修复后的代码如下:
#include <stdio.h> #include <stdlib.h> #include <time.h> int randomNum(int min, int max){ return min + (rand() % ((max-min)+1)); } int main(void) { // 仅初始化一次随机数种子 srand(time(NULL)); printf("%i",randomNum(0,2)); printf("%i",randomNum(0,2)); printf("%i",randomNum(0,2)); printf("%i",randomNum(0,2)); return 0; }
内容的提问来源于stack exchange,提问作者Josiah Sprankle
相关产品推荐
相关产品推荐

