더북(TheBook)

그리고 난수를 뽑을 때는 항상 초기화해 줘야 합니다. 초기화하지 않으면 난수가 제대로 나오지 않습니다. 초기화 코드는 난수를 뽑는 코드 위쪽에 다음과 같이 작성하면 됩니다.

srand(time(NULL)); // 난수 초기화
rand() % 3 + 1; // 1~3

Note srand(time(NULL)) 사용 시 데이터 손실 경고 처리 방법

난수 초기화를 위해 srand(time(NULL)) 코드를 사용할 때 “warning C4244: ‘인수’: ‘time_t’에서 ‘unsigned int’(으)로 변환하면서 데이터가 손실될 수 있습니다.”라는 경고 메시지가 나타날 수 있습니다.

이는 time() 함수로 얻어온 값의 형태(time_t)가 기대한 형태(unsigned int)와 다르다는 뜻입니다. 경고 메시지가 나와도 프로그램이 동작하는 데는 아무런 문제가 없습니다. 하지만 경고 메시지를 없애고 싶다면 time() 함수 앞에 명시적으로 (unsigned int)를 붙여 형변환(7.4.4 어항 물 높이 줄이기 참고)하면 경고 메시지가 나오지 않습니다.

srand((unsigned int) time(NULL)); // 난수 초기화
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.