do~while문

do~while문의 특징

do~while문도 while문과 같이 반복 기능을 수행한다. do~while문은 일단 반복할 문장을 한 번 수행한 후에 조건을 검사한다. 이 점으로 인하여 do~while문과 while문의 차이점이 발생한다. 그것은 반복 조건 검사 시점이다. 즉 , do~while문은 반복될 문장을 무조건 한 번 실행한 후에 반복 조건의 충족 여부를 검사하기 시작한다. 이에 비하여 while문은 반복 조건 검사를 최우선으로 시작한다.

repeat

do~while문의 형식

앞에서 설명한 바와 같이 do~while문은 while문과 다르게 반복 조건을 뒤에서 검사한다. 그렇기 때문에 처음부터 반복 조건을 충족하지 못하면 반복될 부분을 한 번도 실행하지 않는 while문과 다르게 반복 영역을 최소한 한번은 실행한다.
예제 코드를 보자.

do
{
printf ( “Korea Seoul \n”) ;
number++ ;
} while(number < 3 ) ;

위 코드는 do~while문의 형식을 보여 준다. do 다음의 중괄호{ } 안에 반복될 코드가 있고 while의 소괄호( ) 안에 number < 3 이라는 반복 조건이 있다. number 가 0으로 초기화가 되었다고 가정하고 실행의 흐름을 보면 다음과 같다.

1. printf 함수가 호출되어 Korea Seoul 출력한다.
2.증가 연산자 ++에 의하여 number의 값을 1 증가 시킨다.
3.반복 조건을 만족했는가를 검사하여 do~while의 첫 번째 반복 여부를 결정한다.
4. 1에서 3의 절차를 조건을 충족할 때까지 반복한다.

다시 한번 강조하면 do~while문은 while문과 달리 반복 조건의 만족 여부를 뒤에서 검사하므로 반복될 부분이 반드시 1회는 실행 된다는 것이다.

do~while문과 while문의 상호 변환

do~while문은 반복 조건 검사 위치를 제외하면 while문과 상당히 유사한 구조를 갖고 있다. 따라서 , 이 두 반복문은 서로 바뀌어 질 수 있다. 아래 코드를 보자.

do
{ v = v * 2 ;}
while( v < 10) ;

위 do~while문은 아래와 같이 while문으로 바꿀 수 있다.
while (v <= 10)
{ v =v *2 ;}

그런데 , 이 두 반복문이 상호 변환이 가능하다면 이 둘의 구별 실익은 없는가 ?
아니다. 일반적으로 while문이 구조가 더 간단하고 반복 조건이 앞에 위치하므로 이해하기 쉽기 때문에 자주 사용된다. 그러나, 입력 값에 상관 없이 무조건 한 번 실행해야 할 부분이 있다면 do~while문을 사용해야 한다. 아래 예제 코드를 보자.

int main(void)
{
	int total=0, variable=0;
	
	do
	{
		printf("정수 입력(0 to END): ");
		scanf("%d", &variable);          //scanf 는 입력 함수
		total += variable;
	}while(variable!=0);
	printf("합계: %d \n", total);
	return 0;
}

위 예제의 경우 사용자로부터 정수를 입력 받아 합계를 구하는 프로그램이고 0을 입력 받게 되면 종료된다. 따라서 0 이든 , 0 이외의 정수든 무조건 한번은 반복 영역은 실행되어야 한다. 이러한 경우에는 당연히 while문 보다는 do~while문을 사용하는 것이 좋다.