rand()生成相同的数字

lau*_*ura 1 c++ visual-c++

可能重复:
当在单个函数c ++中调用时,rand函数返回相同的值

为什么rand()生成相同的数字?

die.h

#ifndef DIE_H
#define DIE_H


class Die
{
private:
    int number;
public:
    Die(){number=0;}
    void roll();
    int getNumber()const{return number;}
    void printValue();
};

#endif
Run Code Online (Sandbox Code Playgroud)

die.cpp

#include"die.h"
#include<iostream>
#include<time.h>
using namespace std;

void Die::roll()
{
    srand(static_cast<int>(time(0)));
    number=1+rand()%6;
}

void Die::printValue()
{
    cout<<number<<endl;
}
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include"die.h"
#include<iostream>
using namespace std;

int main()
{
    Die d;
    d.roll();
    d.printValue();
    d.roll();
    d.printValue();
    d.roll();
    d.printValue();
}
Run Code Online (Sandbox Code Playgroud)

小智 6

你的调用die.roll()是如此接近,time(0)实际上每次都返回相同的值,因此,你的rand种子对于每次调用都是相同的.roll().

尝试srand(static_cast<int>(time(0)));.roll()(在Die构造函数中main())调用一次(并且只调用一次).