2011-02-13 3 views
3

안녕하세요 여러분, 최근에 C++을 배우기 시작했습니다. 오늘은 약간의 게임을 작성했지만 임의 함수가 제대로 작동하지 않습니다. 임의 함수를 여러 번 호출하면 숫자를 다시 생성하지 않고 같은 번호를 반복해서 인쇄합니다. for 루프를 사용하지 않고이 문제를 해결하려면 어떻게해야합니까? 감사C++ 무작위 int 함수

#include "stdafx.h" 
#include <iostream> 
#include <time.h> 
using namespace std; 
int rolld6(); 

int main() 
{ 
    cout<<rolld6()<<endl; 
    cout<<rolld6()<<endl; 
    system("PAUSE"); 
    return 0; 

} 

int rolld6() 
{ 
    srand(time(NULL)); 
    return rand() % 6 + 1;; 
} 

답변

10

srand(time(NULL));은 보통 의 시작 부분에 main()으로 입력해야합니다.

될 수 당신이 같은 수의 당신에게 같은 초 rolld6를 호출 할 때마다 줄 것이다이 방법하는 많은 시간하고 빠르게 두 번 호출하기 때문에, 샘플에 가까운 보장 계승.

이 시도 : 당신이 빠르게 연속으로 두 번이 프로그램 자체를 실행하는 경우주의해야 할

#include "stdafx.h" 
#include <iostream> 
#include <time.h> 
#include <stdlib.h> 

int rolld6 (void) { 
    return rand() % 6 + 1; 
} 

int main (void) { 
    srand (time (NULL)); 
    std::cout << rolld6() << std::endl; 
    std::cout << rolld6() << std::endl; 
    system ("PAUSE"); 
    return 0; 
} 

한가지입니다. 시간이 변경되지 않은 경우, 두 실행에서 동일한 두 숫자를 얻게됩니다. 그것은 대개 프로그램을 여러 번 실행하는 스크립트가 있고 프로그램 자체가 수명이 짧을 때만 문제가됩니다. 그것은 당신이 일반적으로 할 일이 아니다

1 
5 
1 
5 
1 
5 

있지만 명심해야한다 :

당신이 당신의 system() 전화를 꺼내 몇 번이고 그것을라는 cmd.exe 스크립트가 있다면 예를 들어, 같은 것을 볼 수 있습니다 그 시나리오가 튀어 나올 기회에.

+0

대단히 감사합니다! 샘플이 내 문제를 해결했습니다. – Error1

8

당신은 지속적으로 난수 발생기를 시드된다. 프로그램 시작시에만 srand(time(NULL)); 번으로 전화하십시오.

0

임의의 기능 (언어와 상관없이)은 부분적으로 만 무작위입니다. 당신이

srand(time(NULL)); 

코드의 씨앗이 경우이 의미가 이후 에서 생성 된 시작 값으로 랜덤 함수를 다음 번호의이 부분에 해당하는 것이다 모든 기술

하여 항상을 형성 시드 동일한 값을 항상 얻을 수 있습니다.

위와 같은 경우 (srand (time (NULL) 호출)를 한 번만 수행하려는 경우).

int rolld6 (void) { 
    return rand() % 6 + 1;; 
} 

int main (void) { 
    srand (time (NULL)); 
... 
//call your function here 
} 
동일한 값을 갖는 시드의 이점

한 동일한 난수 시퀀스를 다시 생성 할 가능성을 제공하는 것이다.

내 게임에서 무작위로 화면에 개체를 배치 할 것이지만 재시도 옵션을 구현하고 싶습니다. 동일한 값에서 다시 시드하는 옵션을 사용하면 임의의 값을 모두 저장하지 않고도 다시 실행할 수 있습니다. ^^

+3

첫 문장은 사실이 아닙니다. 일부 최신 시스템에는 하드웨어에 실제 난수 생성기가 포함되어 있습니다. 이것들은 리눅스에서'/ dev/random'로 접근 할 수 있으며 seeding을 필요로하지 않습니다. – MSalters