이 함수를 작성했습니다.
int getRandomNumber(int min,int max)
{
srand(time(NULL));
return rand()%(max-min+1);
}
다음과 같이 호출했습니다.
int x=getRandomNumber(0,2);
int y=getRandomNumber(0,2);
그러나 나는 항상 x와 y 즉 x = y에 대해 항상 동일한 값을 얻습니다.
그것을 고치는 방법?
문제는이다 x
와 y
거의 즉시 초기화됩니다. 따라서 time(NULL)
두 경우 모두 동일한 값을 반환합니다. luk32가 제안한대로 한 번 초기화 할 수 있습니다. 그러나 더 나은 옵션은 rand()
. C ++ 11에는 임의성 품질과 사용 편의성 측면에서 훨씬 더 나은 새로운 옵션이 있습니다. 이 프레젠테이션을 살펴보십시오. rand는 유해한 것으로 간주됩니다.
원하는 코드의 예 (그래도 테스트 할 기회가 없었습니다) :
#include <random>
int getRandomNumber(int min,int max)
{
std::random_device randomDevice; //I put it here just for simplification. Creating a random device is slow, so you should avoid creating it every time.
std::mt19937 rgen(randomDevice()); // mersenne_twister
std::uniform_int_distribution<int> uniformDistribution(min, max); // min and max are included
return uniformDistribution(rgen);
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다