본문 바로가기
2_ 바삭바삭 프로그래밍/C and C++

C++ - rand, srand(난수발생), sleep(지연)

by 준환이형님_ 2012. 5. 31.


콘솔 좌표이동, 색상변경함수(http://topnanis.tistory.com/173)와 함께 자주 사용됩니다.


다음은 0.1초마다 두 자릿수의 랜덤값을 출력하는 소스입니다. rand 혹은 rand 함수는 많은 헤더에 포함되어 있으나 기본은 <stdlib.h> 입니다.


 #include <iostream>         //rand

 #include <time.h> //time

 #include <Windows.h> //sleep, rand

//#include <stdlib.h>          //rand


using namespace std;


int main()

{

srand(time(NULL));

while(true)

{

Sleep(100); //Milliseconds


cout<<rand()%100<<" "; //less 100

}

return 0;

}



* Rand

참고로 rand는 같은 패턴의 난수를 발생시키므로 변경되는 seed값이 들어있는  srand(time(NULL));를 한 줄 위에 포함시켜 주면 패턴이 눈에 띄지 않습니다. 하지만 time(NULL)이라는 것이 작은 수의 일정한 증가이므로 좌표에 찍다보면 만족스럽지 못한 결과값이 출력 되기도 합니다. 그럴 때 저는 랜덤을 곱(rand()*rand()*n 이런식)하거나  millisecond단위의 seed를 썼던것 같은데.. C에서는 별도로 만들어야 되나봐요. 



* Sleep

sleep을 다른 곳에서는 단위가 second라고도 하는데.. 저는 Milliseconds여서 1000이 일초가 나왔어요. for문을 천번이니 만번이니 돌리는 것보다야 정확하겠지만 실제로 시계프로그램을 만들정도로 신뢰 할만한 수준은 나오지 않지요, CPU 사용량에 따라서도 조금씩 오차가 생기기도 하니까.

절대적인 시간까지는 아니더라도 그럴때는 date를 연결하는 편이 좋습니다. if(현재시간 - 전시간 == 10초) 이런 식으로 말이죠.