컴퓨터 엑셀 워드 포토숍 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Previous Post C언어] 랜덤(Random)하게 숫자(정수) 출력, srand(), rand(), rand...[Perl/펄] 배열 내용 모두 지우고 초기화 / 해쉬(Hash) 초기화 - Array I...[Perl/펄 강좌] 배열(Array) 정의에서, qw 란?문제해결] 컴퓨터 속도가 너무 느립니다, PC가 느릴 때 빠르게 하는 법은? - QnA펄/Perl] 배열 요소의 개수 구하기 - Perl Array Elements CountC언어] 볼랜드 C/C++ 컴파일러 다운로드 사이트는? - Borland영한/한영 사전] 오프라인 영어 사전 프로그램 - Offline English Korean...자바/Java] 변수를 상수로 만들기. 읽기 전용으로 - ConstantVMware 공유폴더 설정/만들기 - Shared FoldersC언어 Perl 자바] 줄바꿈/개행문자/행갈이문자/Newline: \n 이란?

C언어] 랜덤 숫자 (난수 정수) 출력 - Random Numbers rand srand 함수

Wednesday, September 20, 2006

랜덤 숫자 만들기 예제


// 이 소스의 확장자를 .c 로 하면 에러가 납니다. 반드시 .cpp 여야 합니다.
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>


void main(void) {
  srand(GetTickCount()); // 이것이 없으면, 실행할 때마다 항상 똑같은 랜덤 숫자들이 나옴

  // 1~100 까지의 숫자 30개를 랜덤하게 출력
  for (int i = 1; i <= 30; i++) printf("%d\n", rand() % 100 + 1);
}



랜덤 넘버 발생기를 초기화할 때는 보통
srand((unsigned) time(NULL));
이렇게 하는데, VC++에서는, 프로그램을 1초마다 실행하면, 랜덤하지 않고 같은 숫자가 나오는 등의 문제가 많이 있었습니다.

time(NULL) 이 1초 단위의 숫자를 만들어 내기 때문입니다.


완벽한 랜덤을 만들기 위해서는 밀리세컨드 즉 1000분의1초 단위의 숫자를 씨앗값으로 해야 했습니다. GetTickCount() 라는 함수가 바로 밀리세컨드 단위로 시간을 반환합니다.* 이것을 넣어 다음과 같이 했더니 잘 작동했습니다.

srand(GetTickCount());


* 현재 시각이 아니라, 윈도우가 부팅된 시점을 기준으로 함


참고로, 위의 예제 소스는 비주얼C++에서만 제대로 작동합니다.



정수 난수 발생기: ▶▶ 난수 발생기; 랜덤 정수 생성, 무작위 숫자 발생; Random Int Number Generator

▶▶ C언어] 0.0 ~ 1.0 범위 실수 난수; 실수형 랜덤 발생; Random Double

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Categories
Previous Posts
Monthly Archives
Top