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 반복문은 반복 횟수가 정해져 있지 않을 때 유용합니다.