본문으로 바로가기

[D+12] C언어 기초 (5)

category 해킹&보안/C언어 2017. 2. 22. 23:16
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

2. C언어 기초


4) 난수(Random Number)


▣ rand 함수

- 함수 원형 : int rand(void);

- 0 ~ 32767의 범위 중 무작위 수를 추출

- seed값에 따라 발생하는 난수의 값이 결정


▣ srand 함수

- 함수 원형 : void srand(unsigned int seed);

- 난수에 발생되는 seed값을 지정

- srand함수를 쓰지않으면 디폴트 seed값은 1


=> 두 함수 모두 stdlib.h 헤더파일에 선언되어 있음.


#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf("rand() = %d\n", rand());
	printf("rand() = %d\n", rand());
	printf("rand() = %d\n", rand());

	return 0;
}

- 실행 결과

☞ seed값이 디폴트 값인 1임.

☞ seed값의 변화가 없으니 여러번 실행해도 다 똑같은 수들이 반복되어 나옴.


▣ 시간값을 사용하여 완벽한 난수 생성

- 컴퓨터 내에서 유지되지 않고 계속되어 바뀌는 정보는 시간정보임.

- 이 시간값을 seed값으로 사용한다면 여러번 실행해도 바뀌는 값이기에 반복되지 않는 완벽한 난수가 생성됨.

- time 함수는 time.h에 선언되어 있음

☞ srand((unsigned) time(NULL));

- BUT! 시간 또한 일정하게 증가하기 때문에 첫번째 rand()값도 일정하게 증가함..

☞ 첫번째 rand()값을 버리거나 time(0) 말고 다른 값을 사용하면 해결.


▣ 원하는 범위의 난수 추출

- rand() % ((마지막값 - 시작값) + 1) + 시작값

- ex) 20 ~ 35까지의 랜덤 수 : rand() % ((35 - 20) + 1) + 20






i2sec 대구지점 23기 수료생.

'해킹&보안 > C언어' 카테고리의 다른 글

[D+14] C언어 기초 (7)  (0) 2017.02.26
[D+13] C언어 기초 (6)  (0) 2017.02.23
[D+10] C언어 기초 (4)  (0) 2017.02.20
[D+9] C언어 기초 (3)  (0) 2017.02.17
[D+8] C언어 기초 (2)  (0) 2017.02.16