개요
C 언어에서 난수(random number)를 생성할 때 사용하는 대표적인 함수가 바로 rand()와 srand()입니다. 두 함수 모두 <stdlib.h> 헤더 파일에 선언되어 있으며, 프로그램 내에서 무작위 값을 필요로 할 때 활용됩니다.
rand() 함수란?
rand() 함수는 의사 난수(pseudo random number)를 생성하는 함수입니다. 반환값은 정수형이며, 그 범위는 0부터 RAND_MAX(일반적으로 32767)까지입니다.
C 언어에서 rand()의 문법은 다음과 같습니다.
int rand(void);
rand() 예제
#include <stdio.h>
#include<stdlib.h>
int main() {
printf("%d\n", rand());
printf("%d", rand());
return 0;
}실행 결과
1804289383 846930886
주의할 점은, 시드(seed) 값을 따로 설정하지 않으면 프로그램을 매번 실행할 때마다 동일한 순서의 난수가 출력됩니다. 이는 rand()가 미리 정해진 알고리즘에 따라 값을 생성하기 때문입니다.
srand() 함수란?
srand() 함수는 rand() 함수가 생성하는 의사 난수의 시작점, 즉 시드(seed)를 초기화하는 역할을 합니다. 이 함수는 별도의 반환값이 없습니다.
C 언어에서 srand()의 문법은 다음과 같습니다.
void srand(unsigned int number);
srand() 예제
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
srand(time(NULL));
printf("%d\n", rand());
srand(12);
printf("%d", rand());
return 0;
}실행 결과
1432462941 1687063760
위 예제에서는 srand(time(NULL))을 사용하여 현재 시간을 시드 값으로 설정했습니다. 시간은 계속 변화하기 때문에, 프로그램을 실행할 때마다 서로 다른 난수를 얻을 수 있습니다. 반면 srand(12)처럼 고정된 값을 넣으면 항상 같은 난수 시퀀스가 생성되므로, 테스트나 디버깅 목적일 때 유용하게 활용할 수 있습니다.
정리
- rand(): 0부터 RAND_MAX 사이의 의사 난수를 생성하고 정수로 반환합니다.
- srand(): 난수 생성의 시드를 초기화하여 매번 다른 난수 시퀀스를 만들 수 있게 하며, 반환값은 없습니다.
- 진짜처럼 무작위한 값을 원한다면 일반적으로
srand(time(NULL))조합을 사용합니다.