C언어 study_난수(rand, srand), 조건문(switch문)

민성철·2022년 11월 8일
0

nadocoding_study_C

목록 보기
9/17

난수

rand(), srand()

프로그래밍 할 때 자주 사용하는 것 중 하나가 난수입니다.
C언어 에서는 난수 함수를 rand()로 사용하며, 이를 사용하기 위해선 앞전에 배웠던 전처리기 지시문(preprocessor directive) (#include)에서 <stdio.h>외에 <time.h>, <stdlib.h> 파일을 추가해야 합니다.

  • <time.h> 파일은 시간 관련 함수를 모아 놓은 헤더파일이고,
  • <stdlib.h> 파일은 난수 생성과 문자열 변환 등을 수행하는 함수들을 모아 놓은 헤더 파일입니다.

난수를 만드는 간단한 예시 코드는 아래와 같습니다.

#include <stdio.h>
#include <stdlin.h> 
#incldue <time.h>

int main(void) {
	for (int i = 0; i < 10; i++) {
		printf("%d ", rand() % 10);
    }
    return 0;
}

output

1 7 4 0 9 4 8 8 2 4
  • 여기서 주의해야 할 점은 시작하는 숫자가 1이 아니라 0입니다. 컴퓨터는 숫자를 0부터 세기 때문입니다.
    따라서 1부터 시작하는 숫자를 출력하기 위해서는 1을 더해줘야 합니다.
  • 그리고 난수를 제대로 출력할때는 항상 초기화를 해줘야 합니다.

위 코드를 반복해 보시면 아시겠지만, 무작위로 출력되는것 처럼 보여도 고정적인 숫자가 출력됩니다. 이는 초기화를 하지 않았기 때문입니다.

때문에 아래와 같이 코드를 수정해 보고 출력물을 확인해보겠습니다.

#include <stdio.h>
#include <stdlin.h> 
#incldue <time.h>

int main(void) {
	printf("난수 초기화 이전\n");
	for (int i = 0; i < 10; i++) {
		printf("%d ", rand() % 10);
    }
    srand(time(NULL));
    printf("\n\n난수 초기화 이후\n");
    for (int i = 0; i < 10; i++) {
		printf("%d ", rand() % 10);
    }
    return 0;
}

output

난수 초기화 이전
1 7 4 0 9 4 8 8 2 4

난수 초기화 이후
5 9 7 7 4 1 2 0 6 9

난수 초기화 이전은 지속 동일한 숫자가 출력되지만,
난수 초기화 이후에는 랜덤하게 숫자가 출력되는것을 확인 할 수 있습니다.

조건문

switch 문

앞전에 익혔던 조건문(if, else if, else) 외에 또 다르게 사용할 수 있는 조건문이 switch문 입니다.

switch문은 조건으로 어떤 값을 받고 이 값과 일치하는 case로 가서 해당 코드를 수행하며, if 조건문과 같이 조건으로 받은 값이 case와 일치하지 않으면 마지막 default문을 수행합니다.
(if문에서 else가 필수가 아닌 것 처럼 switch문에서도 default가 필수는 아니며, switch문이 출력 코드일 경우 case에 해당하지 않으면 아무것도 출력하지 않습니다.)

여기서 주의해야 할 점은 생각했던 case(조건) 의 끝을 정하고 break문을 꼭 사용해야 됩니다.
사용하지 않을경우, case(조건)에 해당하는 코드부터 default 코드 까지 모두 수행됩니다.

default를 작성했을 경우, default는 switch문의 마지막이기 때문에 코드 끝에 break를 작성하지 않아도 됩니다.

또한 if문과 다르게 case 문의 조건으로는 하나의 값만 작성할 수 있습니다.
조건을 범위로 작성할 수 없습니다.

switch문을 활용한 간단한 코드는 아래와 같습니다.

#inlcude <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
	int i;
    srand(time(NULL));
    i = rand() % 3 + 1;
    switch (i) {
    	case 1:
        	printf("Rock");
            break;
        case 2:
        	printf("Scissors");
            break;
        case 3:
        	printf("Paper");
            break;
        default:
        	printf("draw");
    }
    return 0;
}

output은 랜덤하게 각 case값이 나옵니다.

profile
ENTJ-A

0개의 댓글