27.6 반복 횟수가 정해지지 않은 경우

지금까지 조건식에서 반복 횟수를 정한 뒤 변수 i를 증가시키거나 감소시켜서 while 반복문을 사용했지만 while 반복문은 반복 횟수가 정해지지 않았을 때, 논리 조건에 따라 반복 여부를 결정할 때 주로 사용합니다.

다음은 while 반복문 안에서 무작위로 정수를 생성한 뒤 3이 나오면 반복을 끝냅니다. 예를 들어 게임에서 카드를 무작위로 뽑다가 3이 나오면 던지는 식이 되겠죠?

while_random.c

#include <stdio.h>
#include <stdlib.h>    // srand, rand 함수가 선언된 헤더 파일
#include <time.h>      // time 함수가 선언된 헤더 파일

int main()
{
    srand(time(NULL));    // 현재 시간값으로 시드 설정

    int i = 0;
    while (i != 3)         // 3이 아닐 때 계속 반복
    {
        i = rand() % 10;   // rand 함수를 사용하여 무작위로 정수를 생성한 뒤 10 미만의 숫자로 만듦
        printf("%d\n", i);
    }

    return 0;
}

실행 결과

2
9
9
4
0
3
↑ 무작위 생성이므로 실행할 때마다 달라짐

먼저 무작위로 정수를 생성하려면 srand, rand, time 함수가 필요합니다(무작위로 정수를 생성하는 행동을 난수 생성 또는 랜덤이라고도 합니다).

  • srand: 난수를 발생시킬 초깃값인 시드(seed)를 설정합니다. 보통 현재 시간값을 사용합니다.
  • rand: 난수를 발생시킵니다.
  • time: 정수 형태로 된 현재 시간값을 반환합니다.

현재 시간값으로 시드를 설정합니다.

srand(time(NULL));    // 현재 시간값으로 시드 설정

이제 while 반복문에서 i != 3과 같이 조건식을 지정하여 3이 아닐 때 계속 반복하도록 작성합니다. 그리고 루프 본체에서는 i = rand() % 10;과 같이 무작위로 정수를 생성하여 변수 i에 저장합니다. 여기서 rand 함수에서 반환된 값의 자리수가 크기 때문에 10으로 나누었을 때 나머지를 구해서 10 미만의 수로 만들어줍니다.

int i = 0;

while (i != 3)        // 3이 아닐 때 계속 반복
{
  i = rand() % 10;    // rand 함수를 사용하여 무작위로 정수를 생성한 뒤 10 미만의 숫자로 만듦
  printf("%d\n", i);
}

정수가 무작위로 생성되므로 실행을 할 때마다 반복 횟수가 달라지는 것을 볼 수 있습니다. 이처럼 while 반복문은 반복 횟수가 정해져 있지 않을 때 유용합니다.