2009-07-01 8 views
0

1 ~ 100의 임의의 정수가 필요한 매우 간단한 iPhone 앱이 있습니다.난수 기능이 잘못 작동 중입니다.

난수 기능을 호출하는 버튼이 있습니다.

-(IBAction)buttonReleased; 
{ 
    srandom(time(NULL)); 
    int theNum = random() % 100 + 1; 
    numberDisplay.text = [NSString stringWithFormat:@"%d", theNum]; 
} 

문제는 버튼을 빠르게 누르면 가끔씩 새로운 난수가 표시되지 않는다는 것입니다.

답변

8

문제는 time으로 시드하는 것입니다.

time은 초 단위로만 업데이트되므로 초 단위로 클릭하면 동일한 수의 발전기를 시드하므로 동일한 수를 얻게됩니다.

응용 프로그램 시작시 한 번만 시드해야합니다.

+0

doh! 새내기 오류 # 31415 및 계산. 감사. – willc2

+1

또한 시간보다 정밀도가 좋은 것을 뿌려야합니다. (CFAbsoluteTimeGetCurrent() * 1000) 시도해보십시오. – rpetrich

+0

왜 앱 시작 시간에 한 번 시드할까요? 배우고 싶습니다. – willc2

3
srandom(time(NULL)); 

임의의 숫자를 생성 할 때마다 그렇게하지 마십시오. 응용 프로그램이 시작될 때 한 번 수행하십시오.

이유 : 특정 번호의 srandom()을 호출 할 때마다 random()에서 동일한 의사 난수 시퀀스가 ​​생성됩니다. 따라서 같은 초에 함수를 두 번 호출하면 동일한 수를 얻게됩니다.