-
[C/C++] 난수 생성 rand(), srand(), time()기초/C,C++ 2017. 2. 24. 09:41
랜덤 함수
로또 같이 임의로 숫자를 원할때 사용하기 위한 함수이다.
rand() 함수
사용 헤더 : <stdlib.h>
rand 함수 범위 : 0~32767
원하는 범위의 랜덤값을 출력하고 싶을 때
[사용법]
rand()%MAX범위(마지막값)+MIN범위(초기값);
ex) 로또 숫자 뽑기 1~45까지
rand()%45+11;
rand은 "중복 결과"가 발생 할 수 있다.
그때 rand()함수의 값을 지정해서 출력할 수 있다.
srand(시드값);
srand에 시드값을 넣으면 거기에 맞는 값이 출력;
시드값을 time();함수로 넣으면 계속 변하는 난수 발생
[사용법]
srand(time());
time() : <time.h>헤더를 사용
현재 시간을 출력하는 함수
하지만 범위 정수를 출력할 때 는 함수를 따로 만들어줘서 중복을 제거해야한다.
이유는 rand함수를 % 사칙연산을 사용해서 나머지값으로 사용하기에
중복되는 나머지값이 나올수 있다
(ex) 5%2 = 1, 9%2 =1
따라서 사용자 함수를 직접 만들어줘서 사용한다.
[로또]
[로또 소스]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
#define ROTTO 7int num[ROTTO];
int ran(int n){
int i=0;
int rNum=rand()%45+1;for(i=0;i<n;i++){
if(num[i]==rNum){
rNum = rand()%45+1;
i=-1;
}
}
return rNum;
}int main(){
int i=0;
printf("=========로또=======\n");
for(i=0;i<ROTTO;i++){
num[i] = ran(i);
if(i==6) printf("보너스 숫자 : %d\n",num[i]);
else printf("%d번째 숫자 : %d\n",i+1,num[i]);
}return 0;
}'기초 > C,C++' 카테고리의 다른 글
[C/C++] 키워드 (2) 2017.02.24 [C/C++] <Windows.h> (0) 2017.02.24 [C/C++] 모듈(함수) (0) 2017.02.23 [C/C++]배열, \0(null) (0) 2017.02.22 [C/C++] ★찍기 //별찍기 (0) 2017.02.20