이 반복문은 지정한 조건이 참이 될 때까지 반복한다. do 루프도 거의 비슷하지만 의존 블록을 실행하고 나서 조건을 검사한다는 점이 다르다.
do { // 반복 시작 x *= (2.0 - a*x); // 헤론의 근사 공식 } while (fabs(1.0 - a*x) >= eps); // 기준에 근접할 때까지 반복한다.
다시 말해 while 루프는 조건이 처음부터 거짓(false)이면 의존 블록이 실행되지 않지만, do 루프는 의존 블록이 최소한 한 번은 실행된다.
for문과 마찬가지로 do와 while도 {...} 블록을 사용하는 것이 좋다. do와 while의 차이점 중 좀 미묘한 부분이 하나 더 있다. do는 항상 while (조건) 뒤에 세미콜론(;)이 붙는다. 10.2.1절에서 자세히 설명하겠지만 이러한 문법적 특성은 여러 문장을 중첩할 때 상당히 유용하다.
지금까지 살펴본 세 가지 반복문에 break와 continue문을 곁들이면 훨씬 다양하게 제어할 수 있다. break문은 종료 조건을 다시 평가하지 않고 종료한다. 의존 블록 안에서도 break문 뒤에 나온 부분은 실행하지 않고 루프를 종료한다.
while (true) { double prod = a*x; if (fabs(1.0 - prod) < eps) { // 기준에 충분히 근접하면 멈춘다. break; } x *= (2.0 - prod); // 헤론의 근사 공식 }