我想生成n个随机密码,但它始终显示相同的密码

时间:2014-04-26 14:10:11

标签: c++

我想要生成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;
}

如何让它显示不同的密码?

2 个答案:

答案 0 :(得分:1)

您只需要种子rand一次。在代码的开头播种:

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

答案 1 :(得分:0)

请参考函数srand:http://www.cplusplus.com/reference/cstdlib/srand/

的用法
  

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

     

使用相同种子的两个不同初始化将在随后的rand调用中生成相同的连续结果。

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