rand()函数是采用线性同余算法来生成伪随机数序列的,它依赖一个随机种子来计算随机序列的第一个数,如果随机种子是相同的,那么生成的随机序列就是相同的。
srand()函数的作用就是生成随机种子,通常它的参数是time(NULL),表示使用当前系统时间戳(单位为秒)作为随机种子。每次调用srand()都会将随机序列重置,下一次调用rand()将返回随机序列的第一个数。由于程序执行很快,循环在1秒之内就已经完成,time(NULL)每次取到的时间戳都是相同的,srand()自然产生相同的随机序列。下一次调用rand(),总是返回这个序列的第一个数。
而如果将srand()放在循环外,那么srand只会在程序中运行一次,生成一个随机种子。接下来循环调用rand()函数,将根据这个随机种子,不断生成随机序列的下一个数。