关于随机数(生成区间随机数、验证码生成、验证码检测、输入函数的比较)

随机数的生成(两种方式)

  1. 不创建随机数种子,直接生成0—num区间的随机数
//不需要使用随机数种子的随机数生成函数
int RandomFunc1(int num){

	int res = rand() % num;

	return res;
}
  1. 使用随机数种子生成start-end之间的随机数
//通过随机数种子生成随机数
int RandomFunc2(int start, int end){
	//种下随机数种子
	srand(time(0));

	//产生(start-end)之间的随机数
	int res = rand() % (end - start) + start;

	//产生[start-end] 之间的随机数
	//int res = rand() % (end - start + 1) + start;

	//产生(start-end]之间的随机数
	//int res = rand() % (end - start) + start + 1;

	return res;

}

由以上生成的简单验证码生成函数

由参数传入验证码的长度,生成的验证码存储在vector中

//随机验证码生成函数
void VerificationCodeFunc(vector<char> &vec, int len){

	srand(time(0));

	char tep;
	for (int i = 0; i < len; i++){
		switch (rand()%3)
		{
			case 0:
				tep = rand() % 10 + '0';
				break;
			case 1:
				tep = rand() % 26 + 'a';
				break;
			case 3:
				tep = rand() % 26 + 'A';
				break;
		}
		vec.push_back(tep);
	}
}

由以上生成的验证码检验函数

通过键盘拿到输入的字符数组,进而进行比较(ASSIC)

//验证码检测函数
bool VerificationCodeDetectionFunc(vector<char> vec){
	cout << "请输入验证码" << endl;

	//通过使用get() getline() gets() 函数从键盘读入字符
	char cha[10];
	cin.get(cha, 10); //需要注意的是get没有溢出检测

	//遍历传入的验证码字符数组,将二者进行比较
	for (int i = 0; i < vec.size(); i++){
		if (vec[i] != cha[i]){
			return false;
		}
	}
	return true;
}

由以上使用cin输入函数进行简单讨论

  1. cin最基本的输入,会过滤掉不可见的字符(如空格回车TAB等)
  2. cin.get(字符数组,长度,终止字符)函数 ,用于向字符数组中写入数据
  3. cin.getline(字符数组,长度,终止字符)函数 ,用于读取整行数据写入字符数组
  4. 以上两种方法不会检测缓冲区是否已满,如果输入的数据大于num值,那么就会出现溢出造成异常中止
  5. 重点讨论fgets()
    原型如下:char fgets(charbuf, int n, FILE *fp)
    功能:从文件流读取一行,送到缓冲区,使用时注意以下几点:
    1.当遇到换行符或者缓冲区已满,fgets就会停止,返回读到的数据,值得注意的是不能用fgets读二进制文件,因为fgets会把二进制文件当成文本文件来处理,这势必会产生乱码。

2.每次调用,fgets都会把缓冲区的最后一个字符设为null,这意味着最后一个字符不能用来存放需要的数据,所以如果有一行,含有LINE_SIZE个字符(包括换行符),要想把这行读入缓冲区,请把参数n设为LINE_SIZE+1

  1. 由结论1可推出:给定参数n,fgets只能读取n-1个字符(包括换行符),如果有一行超过n-1个字符,那么fgets返回一个不完整的行,也就是说,只读取该行的前n-1个字符,但是,缓冲区总是以null字符结尾,对fgets的下一次调用会继续读该行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值