C++에서 랜덤으로 숫자를 취득하는 방법을 알아보겠습니다.
랜덤으로 숫자를 취득하기 위해서는 rand 함수를 사용합니다.
rand 함수는 0부터 32767 사이에 숫자 중 하나를 랜덤 하게 반환을 합니다.
샘플 소스를 보면서 사용 방법을 확인해보겠습니다.
#include <iostream>
#include <cstdlib>
int main()
{
printf("random : %d\n", rand());
printf("random : %d\n", rand());
printf("random : %d\n", rand());
printf("random : %d\n", rand());
printf("random : %d\n", rand());
}
결과
random : 18042
random : 846
random : 1681
random : 171
random : 19577
숫자가 출력되었습니다.
하지만 문제점이 있습니다.
다시 실행을 해도 결과 값은 동일하게 나옵니다
이유는 컴퓨터에서 랜덤 하게 생성하는 난수의 처리방법입니다.
랜덤 하게 생성하는 난수는 rand함수의 seed값을 가지고 특정한 공식으로 계산을 합니다.
seed값을 랜덤 하게 변경하지 않으면 랜덤 함수를 계산하는 공식의 결과값은 변하지 않습니다.
seed값을 지정하지 않으면 기본값 1이 적용됩니다.
seed값 변경하기 위해서는 srand에 값을 지정하면 됩니다.
#include <iostream>
#include <cstdlib>
int main()
{
srand(10);
printf("random : %d\n", rand());
printf("random : %d\n", rand());
printf("random : %d\n", rand());
printf("random : %d\n", rand());
printf("random : %d\n", rand());
}
결과
random : 12150
random : 131
random : 1086
random : 3857
random : 17538
srand에 값을 10으로 지정해 다시 rand 함수를 실행한 결과값을 보면 값이 변경되었습니다.
srand에 다른 값을 설정하고 실행하면 다시 값이 변경되는 것을 확인할 수 있습니다.
seed값을 설정하는 srand에 값을 랜덤 하게 설정하게 해 준다면 rand 결과도 랜덤 하게 변경됩니다.
srand에 값을 랜덤 하게 설정해주는 방법으로 현재 시간 값인 time을 설정하는 방법을 많이 사용합니다.
srand에 현재 시간인 time을 설정해 rand 함수를 출력하는 샘플을 보겠습니다.
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
srand((unsigned int)time(NULL));
printf("random : %d\n", rand());
printf("random : %d\n", rand());
printf("random : %d\n", rand());
printf("random : %d\n", rand());
printf("random : %d\n", rand());
}
결과
random : 17136
random : 12136
random : 1592
random : 833
random : 1321
rand 함수 결과값이 출력되었습니다.
다시 실행을 하면 결과값이 변경되는 것을 확인할 수 있습니다.
마지막으로 0부터 9까지 숫자를 랜덤 하게 표시하는 샘플을 보겠습니다.
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
srand((unsigned int)time(NULL));
for(int i = 0; i < 5; ++i) {
printf("random : %d\n", rand() % 10);
}
}
결과
random : 0
random : 5
random : 8
random : 0
random : 4
0부터 9까지 숫자를 랜덤 하게 표시하고 있습니다.
rand 함수로 랜덤 하게 추출한 숫자를 10으로 나눈 나머지 값을 출력하기 위해 %를 사용합니다.
댓글