2016-07-30 2 views
1

난 이상한 동작을합니다. 난수 생성을 시도합니다. 그리고 때로는 완전히 같음 또는 동일한 시간에 생성 된 경우 문제가 있습니까? VC 2,012C 난수 생성기가 때때로 동일한 숫자를 생성합니다

for (int i = array_size; i < (array_size); i++) 
{ 

     srand((unsigned int)time(NULL)); 
     int rw = rand() % 960 + (20); //returns a pseudo-random integer between x resolution size 0 -> width 
     int rh = rand() % 640 + (20); //returns a pseudo-random integer between x resolution size 0 -> height 
     lwsl_notice("c:%d width %d height %d\n",c, rw, rh); 
     c++; 
} 

를 사용한 경우의 출력은 : for 루프 밖으로

[2016/06/30 09:39:09:7274] NOTICE: c:0 width 606 height 567 
[2016/06/30 09:39:09:7274] NOTICE: c:1 width 606 height 567 
[2016/06/30 09:39:09:7274] NOTICE: c:2 width 606 height 567 
[2016/06/30 09:39:09:7274] NOTICE: c:3 width 606 height 567 
+0

루프 밖에서'srand'를 사용해야합니다. – ameyCU

+1

oops 더 정확한 dup은 [모든 루프 반복마다 동일한 임의의 숫자] (http://stackoverflow.com/q/9251117/995714), [rand()는 여러 함수 호출에서 일관됨] (http://stackoverflow.com (srand (time (NULL))은 시드 값을 충분히 빠르게 변경하지 않습니다.] (http://stackoverflow.com/q/5574914/995714), [srand()] once?] (http://stackoverflow.com/q/7343833/995714) –

답변

3

루프가 너무 빠르기 때문에 time(NULL)은 항상 같은 값을 갖습니다. 즉 발전기는 항상 동일한 시드에서 시작하므로 항상 동일한 값을 생성합니다.

srand은 프로그램에서 한 번만 호출해야합니다 (for 루프 외부). 일반적으로 사람들은 main 함수에서 한 번 호출합니다.

5

이동 srand((unsigned int)time(NULL));. 루프

+7

이것은 정답이지만 왜 그런지 설명해야합니다. – Michael

+0

정확히 어디서 전화를 걸 수 있는지, 가능한 해결책에 대한 찬반론은 무엇인지 설명하는 것이 유용 할 것입니다. – gdziadkiewicz

1

내부 당신은 array_size내가를 초기화하면 내가를 증가와 함께 i<array_size까지를 반복한다. 그게 뭐야? 더 많은 코드를 게시하십시오.

+0

그건 대답이 아닙니다. – jpo38

+0

**없이 '**'증가하고 루프가 한 번 실행되지 않습니다. 어쨌든 OP가 루프를 수정하더라도 어쨌든 작동하지 않기 때문에 이것이 주요한 문제는 아닙니다. –

관련 문제