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

【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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:33:43