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

为何C语言rand()函数多次运行或在不同IDE中输出始终相同?

为什么这段C代码每次运行输出都一样?

核心原因

rand()是伪随机数生成器,它的输出完全依赖于一个初始的"种子"值。默认情况下,C标准库会把种子固定设为1,所以不管你运行多少次程序、换哪个IDE,生成的随机数序列都是一模一样的——相当于每次都在同一个起点开始生成数列,结果自然不会变。

解决方法

要让每次运行的随机数不一样,你需要用srand()函数手动设置一个每次运行都不同的种子,最常用的就是用当前系统时间作为种子,因为时间每秒都在变化。

修改后的代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>  // 需要包含时间头文件

int numbers[100];
void rastnumaraekle(int insert){
    numbers[insert] = rand() % 1000;
}

int main(void){
    srand((unsigned int)time(NULL));  // 用当前时间设置随机种子
    rastnumaraekle(0);
    rastnumaraekle(1);
    rastnumaraekle(2);
    printf("%d\n", numbers[0]);
    printf("%d\n", numbers[1]);
    printf("%d\n", numbers[2]);
}

注意事项

  • 不要在循环里反复调用srand(),否则会因为时间变化太快(比如同一秒内多次调用)导致生成的随机数反而重复。只需要在程序开头调用一次即可。
  • time(NULL)返回的是从1970年1月1日到现在的秒数,转换成unsigned int类型是为了匹配srand()的参数要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:45:47