C++提供rand()用于生成范围内的随机数,它两都位于头文件cstdlib中(其实真实位置是stdlib.h文件中),RAND_MAX的取值会有所差异,一般它的值会与INT_MAX保持一致。

rand()内部是用线性同余法实现的,所以并不是真正的随机数。比如下面这段代码:

#include <iostream>
#include <cstdlib>

int main() {
    std::cout << rand() << std::endl;
    return 0;
}

上面这段代码在编译后,在同一台机器上,每次运行的结果固定是同一个值。可以理解成:随机一次,之后每次运行程序,它返回的值就确定了
rand()无srand()输出

那如何才能让每次运行返回的结果都不一样呢?这就需要用到srand()了。
srand()用于初始化随机数发生器,它接收一个unsigned int型的参数种子。一般,srand()传入time(0),来确保每次输入的种子不同。

#include <iostream>
#include <cstdlib>

int main() {
    srand(time(0));
    std::cout << rand() << std::endl;
    return 0;
}

编译运行程序,这时候每次运行程序,rand()返回的结果就不一样了,“随机”了。
rand()设置了srand()

rand()用到的算法中是通过种子来计算生成随机数的,其实最开始的那段代码中,虽然我们没有显式设置种子,但实际上这时候默认种子为0。每次传入的种子一样,那么此次程序运行调用rand()生成的随机数序列也一样

#include <iostream>
#include <cstdlib>

int main() {
    srand(0);
    std::cout << rand() << std::endl;
    return 0;
}

编译运行,这时候可以看到程序每次运行的结果又是相同的了。
rand()种子设置为0
有没有注意到,它的结果和第一张图中的是一致的?(因为我是在同一台机器上测试的)

总结一下,如果我们要在程序中使用随机数,该怎么做呢?
1、一定要调用srand()设置种子,一般,传入的值是当前机器的时间time(0),且在一个程序中只要设置一次即可。
2、好像没看见其他接口,如何获取指定范围内的随机数?rand()返回的是范围内的随机数,比如我们需要获取以内的随机数,只需要用rand() % 100即可。