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

C语言循环中每次生成的随机值均相同,求解决方法

循环中生成重复随机值的问题解决

问题根源

你的代码中,每次调用random_number函数时都会执行srand(time(NULL))重新初始化随机数生成器。由于循环迭代速度极快,time(NULL)返回的秒级时间戳在多次调用中完全相同,导致随机数生成器的种子重复,最终每次生成的随机值都一致。

解决方案

随机数生成器的种子只需要在程序启动时初始化一次,不需要在每次生成随机数时重复初始化。

修改后的代码

main.c

#include <stdio.h>
#include <time.h>
#include "./random.h"

#define numberOfLoops 4
int main()
{
    const char *messages[] = {
        "Hello!",
        "How?",
        "Good!"};
    // 仅在程序开始时初始化一次随机数种子
    srand(time(NULL));
    for (int i = 0; i < numberOfLoops; i++)
    {
        int random_value = random_number(0, sizeof(messages) / sizeof(messages[0]) - 1);
        printf("\n%d", random_value);
        printf("\n%s", messages[random_value]);
    }
    return 0;
}

random.h

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int random_number(int min_num, int max_num);

int random_number(int min_num, int max_num)
{
    int result = 0, low_num = 0, hi_num = 0;

    if (min_num < max_num)
    {
        low_num = min_num;
        hi_num = max_num + 1; // 包含max_num在输出范围内
    } else {
        low_num = max_num + 1; // 包含max_num在输出范围内
        hi_num = min_num;
    }

    // 移除重复的srand调用
    result = (rand() % (hi_num - low_num)) + low_num;
    return result;
}

额外说明

  • 标准C规范中,main函数的返回类型必须是int,且需要返回一个状态值(如return 0;表示程序正常结束),void main属于非标准写法,建议修正。
  • rand()生成的是伪随机数,依赖初始种子值,重复使用相同种子会得到完全相同的随机序列。

内容的提问来源于stack exchange,提问作者IllTime00qw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:00:10