You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:54:03