KNK Chap.6 (6.2)
6.2 do 문
do문은 while문을 얘기할 때 떼놓을 수 없음. 둘은 사실상 동일함.
차이점은 제어식 판별 시기임.
do문의 일반형은 아래와 같음.
do statement while ( expression ) ;
while문처럼 표현식으로 본문이 이루어져 있고, 괄호로 제어식을 감싸야 함.
do문이 실행되면, 일단 루프 본문이 실행되고 그 후에 제어식이 평가됨.
표현식이 0이 아닌 값을 가지면 루프 본문은 재실행되고 표현식도 재평가됨.
루프 본문 실행 이후 제어식의 값이 0이라면 do문은 종료됨.
while문에서 만들었던 카운트다운 예제를 do문을 통해서도 만들 수 있음.
i = 10;
do {
printf("T 빼기ㅣ %d. 세는 중\n", i);
--i;
} while (i > 0);
위 do 문 실행시 우선 T 빼기 10, 세는 중 이라는 메시지가 출력된 후 i가 감소함.
그 후 조건 i > 0이 평가됨. i는 계속 감소하다 while문의 카운트 다운 예제와 같은 때에 종료됨.
do문과 while문은 비슷한 점이 많지만, 차이점은 본문 실행 여부임.
do문은 본문을 적어도 한번은 실행하고, while문은 제어식이 0이면 본문을 무시하고 진행함.
모든 do문에는 꼭 중괄호를 작성해주는게 좋음. 없으면 do문인지 while문인지 구분이 어려움.
[프로그래밍] 정수의 자릿수 계산하기
do문은 루프 본문을 반드시 한번은 실행시켜야 하는 경우에 유용함.
예를 들어 사용자가 입력한 정수의 자릿수를 출력하는 프로그램을 만들어 볼 것임.
입력값이 0이 될 때까지 10으로 나눌거고, 나눈 횟수가 곧 자릿수가 될 것임.
입력값이 0이 될 때까지 몇 번을 나눠야 하는지 모르기 때문에 루프가 필요함.
이때, 0 조차도 자릿수가 최소 1이기 때문에, do문이 while문보다 유용함.
위 do 루프를 while 루프로 재작성해보면
while (n > 0) {
n /= 10;
++digits;
}
즉 애초에 n이 0이었다면 루프는 실행조차 되지 않고 프로그램은
자릿수는 0이다.
를 출력했을 것임.