我想要生成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;
}
如何让它显示不同的密码?
答案 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()的调用速度非常快,以至于种子值都相同。