while 반복문은 괄호 안에 조건식만 들어가고, 초기식은 반복문 바깥에 있다.
그리고 중괄호 안에 반복할 코드와 변화식이 함께 들어간다.
초기식
While (조건식) // 루프 선언문(loop statement)
{
반복할 코드
변화식
} // 루프 본체(loop body) 및 변화식
먼저 초기식부터 시작하여 조건식을 판별한다. 여기서 조건식이 참이면 반복할 코드와 변화식을 함께 수행한다.
그리고 다시 조건식을 판별하여 참이면 루프로, 거짓이면 루프를 탈출하여 다음 코드로 넘어간다.
while 반복문 사용하기
while 반복문으로 Hello world를 100번 출력해보자.
1. 먼저 반복문에서 사용할 변수 i를 선언한 뒤 0으로 초기화 한다.
2. while에는 조건식만 지정하면 된다.
3. 여기서 while 반복문은 반드시 아래 중괄호에서 변화식을 지정해야 한다.
4. 변화식을 생략한다면 무한루프된다.
초깃값을 1부터 시작하기
이번에는 i를 0이 아닌 1로 초기화하여 Hello world를 100번 출력해보자.
1부터 100까지 시작해서 100번 출력이 되었다.
(0부터 시작해서 100번에 마무리되면 101번 출력된다.)
초깃값을 감소시키기
초깃값을 크게 주고 변수를 감소시키면서 반복해보자.
while 반복문과 세미콜론
for와 마찬가지로 while도 끝에 ;(세미콜론)을 붙이면 안된다.
while에 세미콜론을 달고 실행해보면 아무것도 출력이 되지가 않는다.
while (i < 100)과 뒤의 루프가 아예 잘려버렸기 때문이다.
그래서 while (i < 100) 을 계속 연산을 하게되어 아무것도 출력을 못하는
무한츠쿠요미같은 현상이 벌어진다.
입력한 횟수대로 반복하기
입력한 횟수대로 반복을 해보자.
또는
이러한 방식으로도 진행할 수 있다.
반복 횟수가 정해지지 않은 경우
지금까지 조건식에서 반복 횟수를 정한 뒤 변수 i를 증가시키거나 감소시켜서 while 반복문을 사용했지만
while 반복문은 반복 횟수가 정해지지 않았을 때, 논리 조건에 따라 반복 여부를 결정할 때 주로 사용한다.
다음은 while 반복문 안에서 무작위로 정수를 생성한 뒤 3이 나오면 반복문을 끝낸다.
예를 들어 카드게임에서 카드를 무작위로 뽑다가 3이 나오면 던지는 식?
먼저 무작위로 정수를 생성하려면 srand, rand, time 함수가 필요하다.
(무작위로 정수를 생성하는 행동을 난수 생성 또는 랜덤이라고도 한다.)
- srand : 난수를 발생시킬 초깃값인 시드(seed)를 설정한다. 보통 현재 시간 값을 사용한다.
- rand : 난수를 발생시킨다.
- time : 정수 형태로 된 현재 시간 값을 반환한다.
srand(time(NULL)); // 현재 시간 값으로 시드 설정
먼저 현재 시간값으로 시드를 설정한다.
1. 그 후 while 반복문에서 i != 3과 같이 조건식을 지정하여 3이 아닐 때 계속 반복하도록 작성한다.
2. 루프 본체에서는 i = rand() % 10; 과 같이 무작위로 정수를 생성하여 변수 i에 저장한다.
- 여기서 10으로 나누었을 때 나머지를 구해서 10 미만의 수로 줄여준다.
int i = 0;
while (i != 3)
{
i = rand() % 10; // 난수 발생 후 10으로 나눈 나머지를 발생.
printf("%d\n", i); // i 출력
}
정수가 무작위로 생성되므로 실행을 할 때마다 반복 횟수가 달라지는 것을 볼 수 있다.
이처럼 while 반복문은 반복 횟수가 정해져 있지 않을 때 유용하다.
while 반복문으로 무한루프 만들기
조건식이 참이라면 무한루프가 된다.
참, 거짓을 이용하여 while의 무한루프를 만들 때 불린(boolean)값인 true를 넣어주기도 한다.
while 반복문에서 중괄호 생략하기
while 반복문으로 반복할 코드가 한 줄이라면 중괄호는 생략할 수 있다.
while 반복문은 보통 루프 본체에 변화식이 함께 들어가므로 중괄호를 생략하는 경우는 많지 않다.
심사문제 : 교통카드 잔액 출력하기
정답을 확인하려면 더보기를 클릭하세요.
'C, C++' 카테고리의 다른 글
C언어 코딩도장(break, continue로 반복문 제어하기) (0) | 2022.04.27 |
---|---|
C언어 코딩도장(do while 반복문으로 최소 한번은 실행하기) (0) | 2022.04.27 |
C언어 코딩도장(for 반복문) (0) | 2022.04.27 |
C언어 코딩도장(switch 분기문) (0) | 2022.04.27 |
C언어 코딩도장(비트 연산자 응용하기 / 플래그) (0) | 2022.04.26 |