一个关于生成8位随机密码的问题

yanshujun 2009-02-22 10:22:24
这是一个生成随机密码的问题,规则:生成8位随机密码,可以是 A~Z,a~z,0~1,生成的密码可以重复。我的代码是:
#include"stdio.h"
#include<iostream>
#include<cstdlib>
#include<ctime>

using namespace std;

int main(){
const int limit=123; //设置随机生成数的上限用
int number;//用来存储生成的随机数
int i=1;//用来存储生成的随机数的个数
for(;i<=8;){
srand( (unsigned)time( NULL ) );
number=static_cast<int>(limit*static_cast<long>(rand())/(RAND_MAX+1l));
if(number>='0'&&number<='9'||number>='A'&&number<='Z'||number>='a'&&number<='z'){
cout<<static_cast<char>(number);
i++;
}
}
return 0;
}

问题出在这句话srand( (unsigned)time( NULL ) );如果没有这句话,可以生成随机密码,但是我想让这个序列是随机的,于是用到这句话,但是加上这句话后,虽然编译没错误,但是执行的时候一直没反应,像是进入了死循环,但是为什么去掉这句后就没有死循环呢?
大家最好在自己的机器上试试~~麻烦各位高手了,我是新人~
...全文
250 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanshujun 2009-02-22
  • 打赏
  • 举报
回复
谢了 各位,问题已经解决了,主要原因是rand()与srand()产生随机数采用的是线性同余算法,即每次重新设置随机数种子后,产生的第一个随机数都是一样的,这也就是为什么我把srand(~~~~~~~)这句话放到for循环内就产生了死循环的原因,谢了各位!
icerhack 2009-02-22
  • 打赏
  • 举报
回复
#include<iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
int main()
{

srand((unsigned)time(NULL));
int a;
for(a=0;a<10;++a)
{

int k;
k=rand()%100;
cout<<k<<" "<<endl;
}
return 0;
}
贴一个简单的代码,生成10个0-100之间的数
fireseed 2009-02-22
  • 打赏
  • 举报
回复
#include <iostream>
#include <stdlib.h>
#include <time.h>
void main( void )
{
srand( (unsigned)time(0) );
const int limit = 10 + 26 + 26; //设置随机生成数的上限用
int number;//用来存储生成的随机数
for( int i = 1; i <= 8; i++)
{
number = rand() % limit;
if(number <= 9 ) std::cout << number;
else if ( number <= 35 ) std::cout << (char)( number + 'A' - 10 );
else std::cout << (char)( number + 'a' - 36 );
}
}
waizqfor 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 yanshujun 的帖子:]
这是一个生成随机密码的问题,规则:生成8位随机密码,可以是 A~Z,a~z,0~1,生成的密码可以重复。我的代码是:
#include"stdio.h"
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main(){
const int limit=123; //设置随机生成数的上限用
int number;//用来存储生成的随机数
int i=1;//用来存储生成的随机数的个数
for(;i <=8;){
srand( (unsigned)tim…
[/Quote]
srand( (unsigned)time(0) )初始化随机数发生器 的时候 要在for循环的外面 而且1次就够了
如果在循环里面 就不是随即了
fireseed 2009-02-22
  • 打赏
  • 举报
回复
srand( (unsigned)time(0) )


这句只用调一次就可以了,不要放到循环里,否则就不是随机了!
lightnut 2009-02-22
  • 打赏
  • 举报
回复
srand( (unsigned)time( NULL ) );
要放在for循环外面!
srand( (unsigned)time( NULL ) );
for(.....) {
........
}
yanshujun 2009-02-22
  • 打赏
  • 举报
回复
这个问题我自己解决了 方法是把srand( (unsigned)time( NULL ) );放在for循环的前面,这样生成的序列还是随机的,但是问题是为什么放放到for里面就进入了死循环呢?

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧