c언어는 랜덤을 표현하기 위해 rand라는 함수를 사용한다.
허나 rand함수를 사용하기 위해서는 그 함수가 들어있는 헤더파일을 호출해야하는데 바로 stdlib.h 라고하는 표준라이브러리 헤더를
호출하면 사용할 수 있다.
rand의 원형을 살펴보면 다음과 같다. int rand(void);
별거없어보인다. 아마도 rand()라고 쓰면 int형으로 랜덤값이 반환될것이다.
하지만 실제로 프로그램을 짜보면 같은 수가 나온다. 왜일까? 실제로 rand함수가 어떻게 생겼는지 보면 알 수 있다.
rand함수 안에서 rand는 다른 여러 함수를 호출한다. 계속 함수속 함수들로 파고들어가면 랜덤값을 생성하는 식이 나온다.
(seed) * 12345 + (어떤값)
위와비슷한 형식이다. seed값에 상수를 곱한 뒤에 특정 메모리에 있는 값을 더해준다.
즉, seed값이 고정되어있고, 특정 메모리의 값이 변하지 않았다면 계속 같은 결과가 출력될 것이다.
그렇기 때문에 우리는 seed값을 주기적으로 변경해줄것이다.
srand함수를 통해서 seed값을 변경해주자 이 함수도 stdlib.h에 정의되어있으므로 rand함수를 쓴다면 따로 헤더를 포함하지 않아도 된다.
srand(2000);
이렇게 작성해보고 실행하면 아까와는 값이 달라졌지만 여전히 반복실행하면 달라진 값으로 계속 같은것을 알 수 있다.
시드값이 시간의 흐름에 따라 달라져야할 필요가 있다. 이제 time함수를 써보자 이는 time.h라는 헤더에 정의되어있다.
srand((unsigned)time(NULL));
이처럼 시드값을 시간에 따라 바뀌도록 해보았다.
이렇게 랜덤을 c언어에서 사용할 수 있다.
'Programing > C' 카테고리의 다른 글
C :: string.h 조사하기 & strcmp사용자함수 구현 (0) | 2017.04.15 |
---|---|
C :: 최댓값구하기 (0) | 2017.04.15 |
C :: 배열포인터와 포인터배열 (0) | 2017.04.15 |
C :: scanf사용시 &(주소연산자)를 사용하는 이유 (0) | 2017.04.15 |
C :: 2차원배열 ㄹ정렬하기 (0) | 2017.04.04 |