C++ 我想生成n个随机密码,但它总是显示相同的密码

C++ 我想生成n个随机密码,但它总是显示相同的密码,c++,C++,我想生成n个随机密码,其中包含3个大写字母、3个小写字母和2个数字。我使用此函数生成了一个包含3个大写字母和3个小写字母的密码,当我输入n时,它始终显示相同的密码:这是我的代码: #include <iostream> #include <string> #include <cstdlib> #include <ctime> using namespace std; void generatepassword() { srand(time(

我想生成n个随机密码,其中包含3个大写字母、3个小写字母和2个数字。我使用此函数生成了一个包含3个大写字母和3个小写字母的密码,当我输入n时,它始终显示相同的密码:这是我的代码:

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
void generatepassword()
{
    srand(time(NULL));
    char a,b,c,d,e,f,g;
    a = static_cast <char>(rand () % 26 + 65);
    b = static_cast <char>(rand () % 26 + 65);
    c = static_cast <char>(rand () % 26 + 65);
    d = static_cast <char>(rand () % 26 + 97);
    e = static_cast <char>(rand () % 26 + 97);
    f = static_cast <char>(rand () % 26 + 97);

    cout<<a<<b<<c<<d<<e<<f<<g<<endl;
}
int main()
{
    int n;
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        generatepassword();
    }
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
void generatepassword()
{
srand(时间(空));
字符a、b、c、d、e、f、g;
a=静态施法(兰特()%26+65);
b=静态施法(兰特()%26+65);
c=静态施法(兰特()%26+65);
d=静态施法(兰特()%26+97);
e=静态施法(兰特()%26+97);
f=静态施法(兰特()%26+97);

cout您只需要在
rand
中设置一次种子。在代码开头设置种子:

int main()
{
    srand(time(NULL)); //<---
    int n;
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        generatepassword();
    }
    return 0;
}
intmain()
{
srand(time(NULL));/>n;

关于(int i=1;i请参考函数srand的用法:

对于srand调用中使用的每个不同种子值,可以预期伪随机数生成器将在随后的rand调用中生成不同的连续结果

使用同一种子进行的两次不同初始化将在后续对rand的调用中生成相同的连续结果


在您的代码中,generatepassword()的调用速度非常快,以至于种子值都是相同的。

尽管这样可以使它工作:在main中的循环中插入>1秒的延迟。