2017-02-15 2 views
2

나는 crand에서 간단한 예제를 만들고 있지만, srand()를 사용하고 있음에도 불구하고 함수는 항상 같은 숫자를 반환합니다.rand()는 동일한 숫자를 반환합니다.

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int generate(int min, int max) 
{ 
    srand(time(NULL)); 
    return rand() % (max - min + 1) + min; 
} 

int main() 
{ 
    int i; 
    for (i = 0; i < 10; i++) 
    { 

     printf("Number random %d = %d\n", i, generate(1, 100)); 
    } 

    return 0; 
} 

실행 :

번호 랜덤 0 = 40 번호 랜덤 1 = 40 번호 랜덤 2 = 40 번호 랜덤 3 = 40 번호 랜덤 4 = 40

는 코드 번호 랜덤 5 = 40 번호 랜덤 6 = 40 번호 랜덤 7 = 40 번호 랜덤 8 = 40 번호 랜덤 9 = 40

+2

당신은 새로운 씨앗 모든 사용을 강요해서는 안 그것을 호출합니다. 매번 응용 프로그램을 시작할 때''srand''를 사용해야합니다. BTW, 당신은 정말로 오래된 학교의''rand' 대신''''을 사용하는 것을 고려해야합니다. –

+1

주 기능 시작 부분에 난수 초기화를 시도하십시오. – flotto

+0

고맙습니다. 작동합니다! –

답변

4

그것은이다 (관찰 된 행동은. 루프의 각 반복에서 동일한 값을 반환 time(NULL)에 의해 발생) 및 프로그램은 아마 매우 빠르게 시드 값을 실행으로 (time())은 각 호출마다 동일합니다. 최소 단위는 1 초입니다.

시도 대신 main()srand() 이동 한 번

1

반복적으로 srand을 호출하면 생성기의 통계 특성이 손상됩니다.

한 번만 호출하십시오.

당신이 그것을 할 때마다 시드 때문에

관련 문제