Wednesday, September 20, 2006
C언어] 랜덤 숫자 (난수 정수) 출력 - Random Numbers rand srand 함수
랜덤 숫자 만들기 예제
// 이 소스의 확장자를 .c 로 하면 에러가 납니다. 반드시 .cpp 여야 합니다.
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
void main(void) {
srand(GetTickCount()); // 이것이 없으면, 실행할 때마다 항상 똑같은 랜덤 숫자들이 나옴
// 1~100 까지의 숫자 30개를 랜덤하게 출력
for (int i = 1; i <= 30; i++) printf("%d\n", rand() % 100 + 1);
}
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
void main(void) {
srand(GetTickCount()); // 이것이 없으면, 실행할 때마다 항상 똑같은 랜덤 숫자들이 나옴
// 1~100 까지의 숫자 30개를 랜덤하게 출력
for (int i = 1; i <= 30; i++) printf("%d\n", rand() % 100 + 1);
}
랜덤 넘버 발생기를 초기화할 때는 보통
srand((unsigned) time(NULL));
이렇게 하는데, VC++에서는, 프로그램을 1초마다 실행하면, 랜덤하지 않고 같은 숫자가 나오는 등의 문제가 많이 있었습니다.
time(NULL) 이 1초 단위의 숫자를 만들어 내기 때문입니다.
완벽한 랜덤을 만들기 위해서는 밀리세컨드 즉 1000분의1초 단위의 숫자를 씨앗값으로 해야 했습니다. GetTickCount() 라는 함수가 바로 밀리세컨드 단위로 시간을 반환합니다.* 이것을 넣어 다음과 같이 했더니 잘 작동했습니다.
srand(GetTickCount());
* 현재 시각이 아니라, 윈도우가 부팅된 시점을 기준으로 함
참고로, 위의 예제 소스는 비주얼C++에서만 제대로 작동합니다.
정수 난수 발생기: ▶▶ 난수 발생기; 랜덤 정수 생성, 무작위 숫자 발생; Random Int Number Generator
▶▶ C언어] 0.0 ~ 1.0 범위 실수 난수; 실수형 랜덤 발생; Random Double
tag: cpp
C언어 | C/C++ (Visual C++)
<< Home