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

C++用rand生成随机密码每次序列相同的解决方法咨询

问题原因

你使用的C标准库rand()函数生成的是伪随机数,默认使用固定的初始种子,所以每次程序运行时生成的随机数序列完全相同,最终输出的密码自然一致。

解决方法

方法1:使用srand()设置随机种子(最快捷修复)

你只需要做两处修改即可:

  1. 引入<ctime>头文件,用于获取系统时间
  2. 在程序启动后、第一次调用rand()之前,用当前系统时间作为种子初始化随机数生成器

修改后的main函数示例:

#include <ctime> // 新增头文件

int main() {
    srand((unsigned int)time(nullptr)); // 新增初始化随机种子的代码
    generate();
    return 0;
}

注意:不要在循环内重复调用srand(),否则会因为时间取值精度问题导致生成重复随机数。

方法2:使用C++11及更高版本的随机库(更推荐,随机性更强)

如果你的编译环境支持C++11及以上标准,可以用<random>库替换老旧的rand()/srand()组合,生成的随机数质量更高、分布更均匀,更适合密码生成场景。
示例的随机字符生成逻辑替换参考:

#include <random>
// 全局随机数生成器,仅需初始化一次
std::random_device rd;
std::mt19937 gen(rd());

char randupper() {
    std::uniform_int_distribution<> dis(0, 25);
    return 'A' + dis(gen);
}
// 其余randlower、randspecial、randnumbers等函数同理修改即可
额外优化提示

你当前的配置读取函数read()每次读取参数都会重复打开关闭pg_options.txt文件,建议可以一次性读取所有配置参数存入变量,减少IO操作提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:42:01