c随机数返回都是同一个值

写了一个范围内生成随机数的函数,范围7以内的时候每次返回值都是3


int randomIn(int lower, int upper) {
    int n;
    srand(time(NULL));
    n = rand()%7;
    return n;
}

因为只有在7的时候有问题 所以就直接改成了%7

不管多少次 输出的都是3

求教这是怎么一回事

阅读 4.1k
6 个回答

把srand挪出去试试

将 srand(time(NULL));这行注释掉就可以了,原因:time(NULL)返回值没有改变,导致srand(unsigned int seed)种子不变,所以rand()产生的随机数就不变。

他肯定是在一个for循环里调了他那个函数,srand调一次就好了

srand函数用来重置随机数序列,这个只使用一次就可以了,非必要情况下不重置,所谓的随机函数都是伪随机序列,你使用同一个随机种子,重置出来的同一个伪随机序列,然后每次取的都是序列的第一个数据,所以是不会变化的

对,你的预感是对的,rand并不是真正随机,而且以时间作为种子,而你设置种子为0,所以产生的数是相同的。

不知道你是怎么回事?我这段C++代码运行是正常的(每次输出随机)。
是不是你的输出语句有问题。

#include <iostream>
#include <ctime>
#include <cstdlib>
int randomIn(int lower, int upper) {
    int n;
    srand(time(NULL));
    n = rand()%7;
    return n;
}
int main(){
    std::cout << randomIn(0,0);
    return 0;
}