난수 발생 함수
srand( (unsigned)time( NULL ) ); // 난수 발생초기화 m_iNowBlockShape = rand()%7; // 난수 발생
|
C에서 난수 발생
다른 언어와 비슷하겠지만 C언에서 여러 개의 난수표를 가지고 있습니다. 이 난수표에는 임의의 수가 나열되어 있으며 C에서 난수표의 값을 가져오는 방식입니다.
이 때 동일한 난수표와 동일한 위치에서 난수를 가져오게 된다면 어떻게 될까요?
항상 같은 값만 나올 것입니다.
그래서 사용할 난수표와 위치를 항상 변경해 줘야 하는데 srand() 함수로 변경할 수 있습니다.
srand 파라미터에 어떤 숫자를 넣어 주면 난수표와 위치가 변경됩니다.
그렇다면 항상 다른 값의 파라미터를 입력해야 하는데, 어떻게 해야 할까요?
또 난수를 발생시켜 넣어 줄까요? ;;
이 때는 시간을 파라미터로 넣어 주면 됩니다. 시간은 항상 변하니까요^^.
그래서 C 에서는 아래처럼 사용됩니다.
srand( (unsigned)time( NULL ) ); // 난수 발생초기화 m_iNowBlockShape = rand(); // 난수 발생
|
난수 발생하는 방법을 알았는데,
만약 0 ~ 6까지의 난수를 생성하려면 어떻게 해야 할까요?
생성된 난수를 7로 나눈 나머지를 사용하면 되겠죠^^
srand( (unsigned)time( NULL ) ); // 난수 발생초기화 m_iNowBlockShape = rand()%7; // 0 ~ 6까지의 난수 발생
|
그렇다면 난수의 최대값을 얼마일까요?
컴파일러 마다 다를 수 있는데 헤더 파일에 선언되어 있습니다.
printf("RAND_MAX: %d", RAND_MAX); // 생성할 수 있는 난수의 최대값
|
RAND_MAX 는 어디 있으며, srand(), rand() 함수는 어디에 있나요?
아래 헤더 파일을 추가해 줘야 합니다.
#include <stdlib.h> // RAND_MAX, srand(), rand() 함수 #include <time.h> // time() 함수
|
난수 초기화 함수를 여러 번 실행하면 난수 발생이 더 효과적인가요?
=> 그렇지 않습니다. 초기화를 한 번하던 열번 하던 효과는 같습니다.~~
난수 초기화를 하지 않으면 항상 같은 수가 나오나요?
=> 컴파일러마다 약간 다를 가능성도 있지만 이론상으로는 항상 같은 값이 나옵니다.
아래는 C에서 난수를 발생한 예입니다.
#include <stdio.h> #include <stdlib.h> // RAND_MAX, srand(), rand() 함수 #include <time.h> // time() 함수
int main(int argc, char* argv[]) {
// srand( (unsigned)time( NULL ) ); // 난수 발생초기화
for (int i=0;i<10;i++) { printf("\n%d",rand()); }
return 0; }
|
41 18467 6334 26500 19169 15724 11478 29358 26962 24464 |
'스터디 > C, C++ 언어' 카테고리의 다른 글
MFC, WAVE(.WAV) 파일 재생 (0) | 2011.06.03 |
---|---|
C++, 간단한 덧셈 연산 (0) | 2011.05.24 |
VC++ 6.0 설치 (0) | 2011.05.24 |
scanf 로 수를 입력 받은 후 정렬하기 (0) | 2011.05.08 |
문자열로 다이아몬드 모양 만들기 소스 (0) | 2011.05.07 |
소수점(float,double) 있는 십진수를 이진수로 변환 (2) | 2011.03.24 |
C++, scanf 에서 float 사용하기 (0) | 2011.03.23 |