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

为何for循环输出相同随机数?C语言随机数生成问题求助

问题分析与解决

问题原因

你每次调用RollFor()时都执行srand(time(NULL)),而time(NULL)返回的是秒级时间戳。循环执行速度极快,三次调用几乎在同一秒内完成,导致每次设置的随机数种子完全相同。rand()函数的输出完全依赖种子值,相同种子会生成一模一样的随机数序列,所以每次得到的数字都相同。

另外,变量作用域不是这个问题的诱因,全局变量roll不影响随机数的生成逻辑。

修复后的代码

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int roll;

void RollFor(){
    roll = (rand() % 6 + 1);
    printf("%d ", roll); // 增加空格,方便区分输出的数字
}

int main(){
    srand(time(NULL)); // 随机数种子只需要初始化一次
    for (int i = 0; i < 3; i++)
    {
        RollFor();
    }
    return 0;
}

关键说明

  • 随机数种子仅需初始化一次:srand()应该在程序启动时调用一次,而非每次生成随机数都重复调用。这样rand()就能基于唯一的种子值生成连续的随机数序列。
  • 如果需要更高精度的随机数(比如毫秒级),可以使用clock_gettime()这类更精细的时间函数,但对于这个简单场景,秒级时间戳已经足够,只要保证种子只初始化一次即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:03:14