이는 값을 무작위로 값을 주는 함수이다. 하지만 이는 실제로 무작위로 주는 것은 아니다. 실제로는 무작위 숫자 테이블이란 것이 존재하여, 이를 리턴하는 것이다.
이때 생길 수 있는 문제가 숫자 테이블은 항상 일정하기 때문에, 프로그램을 실행할 때마다 동일한 랜덤숫자가 나올 수 있다. 이를 해결하기 위한 방법이seed
이다. 이 값은 랜덤 값 테이블에서 시작지점을 의미한다. 이를 지정하는 밥법은srand(seed값);
으로 지정해주면 된다.
#include<iostream>
#include<iomanip>
#include<cstdlib>
using namespace std;
int main() {
unsigned int seed{ 0 };
cout << "Enter seed: ";
cin >> seed;
srand(seed);
for (unsigned int counter{ 1 }; counter <= 10; ++counter) {
cout << setw(10) << (1 + rand() % 6);
if (counter % 5 == 0) {
cout << endl;
}
}
return 0;
}
이처럼 seed값을 달리 함에 따라 랜던 값 테이블의 시작지점이 달리짐으로 랜덤값도 다르게 나온다. 또한 seed를 67로 동일함하게 함에따라 랜덤 숫자의 값과 순서가 동일하게 나오는 것을 볼 수 있다.
+추가
srand(seed값)
을 선언해줄 때, time(0)을 통해 seed값을 계속 변하게 해줄 수 있다. time(0)는 현재시간을 1970년 1월1일 기준으로 몇초 지났는지 알려주는 함수이다. 이를 이용하여 값을 계속해서 변하게 해줄 수 있다. for문과 같은 반복문을 사용할때는 이를 반복문 밖에서 선언하는 것이 좋다. 왜냐하면 time(0)은 초를 기준으로 하는데 반복문이 1초안에 끝날 수도 있기 때문에 이는 제대로 된 랜덤 숫자를 불러오지 못할 것이다.