2013-05-15 4 views
7

내 프로그램에는 매번 무작위 양의 정수를 생성해야하는 코드가 있습니다. 난수를 생성하지만 한 번만 생성합니다. 그 후 동일한 코드를 실행하면 동일한 값을 갖게되고 코드가 쓸모 없게됩니다.함수 srand()를 time.h와 함께 사용하는 방법은 무엇입니까?

나는 랜드 기능을 시작하고 나는 time.h 헤더 파일로 부터 srand() 기능을 사용하지만, 여전히 제대로 작동하지 않습니다.

#define size 10 
for(i=0;i<size;i++) 
    Arr[i] = rand()%size; 

먼저 호출 (임의) : (이전과 같은 임의하지만 동일)

6 0 2 0 6 7 5 5 8 6 

두 번째 호출 :

6 0 2 0 6 7 5 5 8 6 

나중에 나는 스택 오버플로 질문을 방문하고 내가 읽은 srand() 함수는 다음과 같이 사용했습니다.

#include<time.h> 
for(i=0;i<size;i++) 
    Arr[i] = srand(time(NULL)); 

먼저 전화 :

-10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 

두 번째 전화 :

-10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 

그것은 나에게 다른 (그러나 임의 값)을주고있다. Arr [i]을 부호없는 정수으로 정의했지만 여전히 음수 값을 갖습니다.

+1

시드를 설정 했습니까? 시간 함수를 사용하여 시드를 설정하십시오. – Magn3s1um

+4

'rand' 제너레이터를 시드하려면'srand'를 한 번만 호출하면됩니다. 매번'srand'를 호출하여 전화 번호를 얻지 마십시오. – TJD

+3

[man page] (http://linux.die.net/man/3/rand)를 읽어야합니다.이 기능은 어떻게 작동하는지 설명하고 제공합니다. 작업 예제. – Aya

답변

31

당신은 당신의 루프에서 rand()를 호출 한 후, 일단 srand()를 호출하는 씨앗을 무작위하고, 필요

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

#define size 10 

srand(time(NULL)); // randomize seed 

for(i=0;i<size;i++) 
    Arr[i] = rand()%size; 
+0

srand() 걸립니다 부호없는 int를 입력으로하므로 시간 (NULL)을 다시 작성해야합니다. – Jiminion

3

시도를 무작위 생성기를 초기화 랜드()() 이전에 무작위로 전화를.

(봐 : srand() — why call it only once?) 당신이 srand로 선택한 경우

+0

나에게 코드를 써주세요, 당신이 그것을 넣으면 정말 도움이 될 것입니다 –

+0

'randomize'는 표준 함수가 아닙니다 - 아마도'srand'를 의미할까요? –

+0

Paul R, 예, "stdlib.h"의 srand()를 의미합니다. 의견을 보내 주셔서 감사합니다. 내 실수. –

1

은, 끔찍한 원시 사이비 난수 발생기의 일종이기 때문에 당신이 그것을 사용하기 전에 다음에 한 번 이상 rand()를 호출하는 것이 좋습니다. 스택 오버플로 질문 Why does rand() % 7 always return 0?을 참조하십시오.

srand(time(NULL)); 
rand(); 
//Now use rand() 

가능한 경우, 하나 random 또는 arc4rand 더 좋을 것입니다.

-1
#include"stdio.h" 
#include"conio.h" 
#include"time.h" 

void main() 
{ 
    time_t t; 
    int i; 
    srand(time(&t)); 

    for(i=1;i<=10;i++) 
    printf("%c\t",rand()%10); 
    getch(); 
} 
-2
#include"stdio.h"//rmv coding for randam number access 

#include"conio.h" 

#include"time.h" 

void main() 
{ 
    time_t t; 
    int rmvivek; 

    srand(time(&t)); 
    rmvivek=1; 

    while(rmvivek<=5) 
    { 
     printf("%c\t",rand()%10); 
     rmvivek++; 
    } 
    getch(); 
} 
+0

이 방법은 암호화 된 암호 해독 및 사용되는 서브 파트 –