C

KNK Chap.6 (6.2)

Daryl 2022. 12. 16. 16:31

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이다.

를 출력했을 것임.