C++에는 <cstdlib> 라는 헤더파일에 rand라는 난수 생성 함수가 있어요~
rand()함수를 호출하면 0에서 RAND_MAX(32767) 까지의 정수 1개를 리턴해요.
위 결과를 보면 rand함수를 5번 실행한 경우와 10번 실행한 경우에 1~5번째 값이 같아요~
또 실행할때마다 계속해서 위와 같은 결과가 나오게 되구요~
rand함수는 시드(seed)라는 값에의해 생성되므로 시드값을 설정을 해주지 않아 같은 시드값으로 실행이되어 위와같은 현상이 나타나요.
이를 해결하기 위해서 srand함수를 이용하여 시드값을 설정해주면 잘 해결되요~
srand로 시드값을 10으로 설정해준 결과와 5를 설정해준 결과가 다르게 나타나요.
하지만 같은 시드값으로 재실행을 하면 같은 결과가 나와요.
저희가 실행할때마다 시드값을 직접 지정을 할 수 없으므로 보통 srand에 인자에 ctime라이브러리의 time함수를 추가해주면 잘 되요.
실행결과를 보면 실행할때 마다 결과가 다르게 나오게 되죠?? 해보시면 알아요 !
난수들을 보면 결과값이 0~RAND_MAX 사이의 값이 나오므로 매우 큰수들이 나와요.
(RAND_MAX는 시스템마다 다르긴 하다)
따라서 이 값을 원하는 범위내에서 나오게 하기위해 나머지 연산(%) 을 이용하면 됩니당~.
rand() % M을 하면 0~(M-1)까지의 수가 생성
rand() % M + N을 하면 N~(M+N-1)까지의 수가 생성
rand() % 100이면 0~99까지의 수가 ( 0 ~ (100-1) )
rand() % 100 + 1이면 1~100까지의 수가 ( 1 ~ (100+1-1) )
'Stupid Computer > 2. C 언어' 카테고리의 다른 글
[C/C++] 유효한 날짜 검사 하는 함수 ! 날짜가 유요한지 검사 ! validiation date ! test date ! (0) | 2014.07.04 |
---|---|
[C/C++] 날짜를 입력받고 timeStamp로 바꾸는 함수 !! ( date to TimeStamp in C/ C++) (0) | 2014.07.04 |
[C/C++] TimeStamp to DateTime 시간을 초단위로 변환하여 출력 (convert timeStamp to DateTime String ) (0) | 2014.06.23 |
[C/C++] 현재 시간을 가져와서 timeStamp(초 단위) 출력, 우리가 쓰는 시간으로 출력 (0) | 2014.06.02 |
[C/C++] Class 사용, 은행 계좌 개설 및 입금, 출금 예제 ! (코드 첨부 ) (0) | 2014.05.28 |
[C/C++] Enum 사용법 , C언어 열거형 사용법 열거형(Enum) (0) | 2014.05.19 |
[C/C++] #ifdef 사용법 ! ifdef, endif 사용법 !! 모드 전환 ! (0) | 2014.05.08 |
[C/C++] Menu 화면 구성 ! if else if ~ ( 메뉴 10개 이상 넘어갈때 ) (0) | 2014.04.24 |
[C/C++] switch case문 10개 이상 만들기 ! (0) | 2014.03.24 |
[json/cjson] json_object_is_type 사용법 (0) | 2014.03.06 |