概述
一、基本函数
1.rand
在C语言中,如果要实现随机抽取,需要用到rand。
rand()会返回一个范围在0到RAND_MAX(32767)之间的伪随机数(整数)。
在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。随机种子相同,每次产生的随机数也会相同。
rand()函数需要的头文件是:<stdlib.h>
使用rand()函数产生1-100以内的随机整数:int ret = rand() % 100 + 1;
2.srand
srand()函数需要的头文件仍然是:<stdlib.h>
srand()用来设置rand()产生随机数时的随机数种子,使用rand()和srand()产生1-100以内的随机整数:srand(time(0));
int ret = rand() % 100 +1
随机数(1~ a)公式:
ret = rand() % a + 1;
3.time
头文件:<time.h>
为了使随机数更随机,我们通常以当前时间为种子,产生随意数。time(NULL)用来获取当前时间,本质上得到的是一个大整数,然后用这个数来随机数。
#include <stdlib.h>
#include <time.h>
srand((unsigned int)time(NULL));
ret = rand() % 20 + 1;
二、常见问题
1.随机数卡顿
通常我们用srand(time(NULL));语句,就是用当前时间(单位是秒)给rand()的运算设初值,但由于你每次都用这句,所以当时间相同时,运算出来的伪随机数就是相同的。而由于time()函数的单位是秒,所以程序就一直循环,直到过了大约1秒钟,两次srand(time(NULL));设的初始数字不同时,才可能找到下一个数,而且这个数还是不够随机的。如此一来,你每产生一个新数的时间至少要1秒钟,自然7个数要10秒钟也就很正常了。
但是,如果把srand()语句挪到main()函数的开头,就可以很好地解决这个问题。
int main()
{
srand((unsigned int)time(NULL));
for (i = 0; i < 20; i++)
{
ret = rand() % 20 + 1;
2.抽取到相同的随机数
这个时候可以用数组来过滤掉相同的随机数
for (i = 0; i < 20; i++)
{
ret = rand() % 20 + 1;
for (j = 0; j < i; j++)
{
if (arr[j] == ret)
{
i--;
j = -1;
break;
}
}
if (j < 0)
continue;
3.空格问题
如输入A和输入A[空格][空格]输入的结果都是一样的,那么我们应该怎样解决这个问题呢?
这里我们需要用到isspace函数
isspace函数主要用于检查参数c是否为空白字符。
头文件:<ctype.h>
#include <ctype.h>
scanf_s("%s", arr2, 1000);
for (j = 0;arr2[j] != '