Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바스크립트
- time()
- 제네릭 함수
- 데이터베이스
- 테이블
- C언어
- SQL
- 친구함수
- call by referance
- 코딩
- this객체
- jQuery
- C++
- freiend선언
- 멤버접근허용
- 함수중복
- 함수표현식
- 연산자재정의
- new연산자
- 생성자호출
- friend함수
- 자바스크립트라이브러리
- 웹개발
- freiend클래스
- JS
- 랜덤출력
- 프로그래밍
- react
- HTML
- 객체지향프로그래밍
Archives
- Today
- Total
Programming Storytelling
랜덤함수 rand(),srand() 에 대하여 본문
rand(),srand() 함수는 cstdlib 헤더파일에 존재한다.
하지만 iostream헤더파일을 사용해도 된다.
먼저 rand()는 난수를 발생시키는 함수이다.
하지만 rand()는 정확히 말해서 난수를 발생시키는 것이 아니라 내부에 저장된 난수표에서 seed값에 따라 난수를 뽑아 오는 것 뿐이다. 그래서 이 seed값을 의도적으로 변경하지 않는 이상 항상 똑같은 난수를 뽑아내는 결과를 초래할 것이다. 따라서 진정한 의미의 난수를 발생시키기 위해서는 프로그램을 실행할 때마다 새로운 seed값을 설정해서 전혀 새로운 난수를 뽑아내도록 해야한다, 그 seed값을 설정하는 함수가 srand()이며 srand()는 time()로 현재의 시간(초)를 대입 해 주는 것이다. 이로서 프로그램 실행시마다 전혀 새로운 시간 값을 입력 할 수 있다.
srand()의 인수는 unsigned int 타입의 값이며 따라서 time()호출로 반환 된 time_t타입의 값을 unsigned int 타입으로 형변환 해야 한다.
int test = rand() % (x+1); // 0부터 x사이의 수를 랜덤 출력
int test = rand() % (b-a+1) + a; // a부터 b사이의 수를 랜덤 출력
아래의 코드는 rand()만 활용한 결과이다. 랜덤함수가 매번 똑같이 출력된다.
#include<iostream>
#include<stdlib>
using namespace std;
int main() {
for(int i = 0; i<5; i++) {
cout<<rand()<<endl;
}
return 0;
}
이제 단점을 극복하는 srand()를 사용 한 코드를 살펴보자.
#include<cstdlib>
using namespace std;
int main() {
srand((unsigned int)time(NULL));
for(int i=0; i <5; i++) {
cout<<rand()<<endl;
}
return 0;
}
'C++' 카테고리의 다른 글
freind 클래스와 함수에 대하여 (0) | 2019.06.12 |
---|---|
정적 변수, static 키워드란? (0) | 2019.06.12 |
복사 생성자(copy constructor) (0) | 2019.06.12 |
C언어 기원 C++프로그래밍,무엇이 추가 되었을까? (0) | 2019.06.08 |
함수의 오버로딩과 인라인함수 및 매크로 함수 (0) | 2019.04.16 |