C语言rand函数生成1-5范围随机数每次输出相同值问题咨询
问题原因
- C标准库的
rand()是伪随机数生成器,依赖初始种子值生成固定序列的随机数 - 未主动设置种子时,
rand()默认使用固定的初始种子,因此每次程序运行得到的随机数完全相同,你观察到的固定输出4就是默认种子下的第一个生成值
修复方案
不需要调整现有主逻辑,仅需做两处修改即可实现每次运行生成不同的随机数:
- 新增
<time.h>头文件引入,用于获取系统时间作为动态种子 - 在调用
rand()之前调用srand()设置随机种子,程序运行全程仅需设置1次即可
修改后的完整代码如下:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ // 用当前系统时间作为种子,保证每次运行种子都不同 srand((unsigned int)time(NULL)); int r; r = rand() % 5 + 1; printf("%d ", r); switch (r){ case 1: printf("1\n"); break; case 2: printf("2\n"); break; case 3: printf("3\n"); break; case 4: printf("4\n"); break; case 5: printf("5\n"); break; } return 0; }
关于循环结构的说明
- 如果你仅需要每次启动程序生成1个1~5的随机数,不需要添加循环结构,按上述修改即可满足需求
- 如果你需要单次程序运行时生成多个不同的随机数,才需要添加循环结构,注意
srand()只能放在循环外调用1次,不要放在循环内部重复调用,否则会因为时间精度问题生成重复的随机数
内容的提问来源于stack exchange,提问作者Jacob G
相关产品推荐
相关产品推荐

