2009-06-11 5 views
0

저는 C++로 뛰어 들고 있습니다. 난수 생성기를 만들려고합니다. (얼마나 무작위인지는 중요하지 않습니다.) 대부분의 코드는 그물에서 복사되지만 내 초보자의 눈에는이 점이 잘못 표시되지 않습니다. 매번 "6"이외의 숫자를 지정하기 위해이 코드를 조정할 수있는 방법이 있습니까?난수 생성기에 어떤 문제가 있습니까?

#include <iostream> 
#include <string> 
#include <cstdlib> 

using namespace std; 
int random_number(int min, int max) 
{ 
    srand((unsigned)time(0)); 
    int random_num; 
    int range=(max-min)+1; 
    random_num = min+int(range*rand()/(RAND_MAX + 1.0)); 
    return random_num; 
} 
int main() 
{ 
    for(int i =0;i < 100;i++) 
    { 
      cout << random_number(3,10) << endl; 
    } 
} 
+2

한 번 시드하면 어떻게됩니까? 나는. 주요 기능에서 루프 앞에 루프를 이동 하시겠습니까? – dreamlax

+2

6 ?? 아니, 아니, 난수는 * 4 * - http://xkcd.com/221/이어야합니다. – AviD

답변

4

추가부터 srand 루프

srand((unsigned)time(0)); 
    for(int i =0;i < 100;i++) 
    { 
     std::cout << random_number(3,10) << endl; 
    } 
4

random_number() 내에서 srand()를 호출하지 마십시오. 이렇게하면 모든 호출마다 난수 생성기가 다시 시드됩니다. 100 회의 통화의 경우, 모든 통화가 동일한 종자를 얻게되므로 동일한 번호가 부여됩니다.

2

전에 문제는 당신부터 srand마다 사용하는 것입니다. CPU가 매우 빠르기 때문에 모든 코드가 1 초 내에 실행되므로 매번 동일한 시드가 생성됩니다.

루프에서 srand를 제거하고 한 번만 호출하십시오.

관련 문제