컴퓨터 프로그래밍/C

C언어 rand() srand() time() 함수 (난수 생성)

나노콛 2019. 7. 23. 10:15
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	srand(time(NULL));
	printf("%d\n",rand());
	printf("%d\n",rand());
	printf("%d\n",rand());
	
	return 0;
}

rand() 함수는 stdlib.h에 선언되어 있습니다.
함수의 인자는 비워도 상관없습니다.
0~32767의 범위 중 무작위 수를 뽑아주는 함수입니다.

 

#include <stdio.h>
#include <stdlib.h>
int main()
{
	printf("%d\n",rand());
	printf("%d\n",rand());
	printf("%d\n",rand());
	
	return 0;
}

그러나 위의 소스를 다시 실행하면 결과가 똑같이 나옵니다.

그 이유는 seed 값이 똑같기 때문입니다.

srand() 함수는 stdlib.h에 선언되어 있습니다.
 난수에 발생되는 seed 값을 지정합니다.
기본값은 1로 되어 있습니다. 
이 함수의 인자로는 양의 정수를 넣으면 됩니다.

 

#include <stdio.h>
#include <stdlib.h>
int main()
{
	srand(1);
	printf("%d\n",rand());
	printf("%d\n",rand());
	printf("%d\n",rand());
	
	return 0;
}

이렇게 srand(1) 하면 처음과 똑같은 결과를 볼 수 있습니다.

그러나 수를 바꾸면

srand(2);

결과가 달라지는 것을 확인할 수 있습니다.
하지만 시드값은 변동이 없기 때문에 또 실행하면 같은 결과가 나옵니다.

이 문제를 해결하기 위해


time() 함수를 이용해 봅시다.
time.h에 선언되어 있습니다.

이제 실행할 때마다 다른 난수가 생성됩니다.


난수 생성 시 원하는 범위까지의 난수를 생성하고 싶은 경우

rand() % ( (마지막 값 - 시작 값) + 1 ) + 시작 값  하시면 됩니다.
1에서 50까지의 난수 범위를 설정할 때는
rand() % ( ( 50 - 1 ) + 1 ) + 1

 

식을 간단하게 하면 다음과 같습니다.

rand() % 50 + 1


이렇게 하면 범위지정이 가능합니다.