C++ 반복 제어

while과 do-while

조건 기반 반복은 몇 번 도는지가 아니라 언제 멈추는지의 문제다. 진입 전 검사, 실행 후 검사, 입력 소비, 상태 갱신 위치를 분리해 무한 루프와 off-by-one을 막는다.

01

초기 상태

조건식에서 읽는 변수가 반복 전에 유효한 값으로 준비됐는지 본다.

condition operand를 먼저 세팅
02

조건 평가

while은 본문 실행 전, do-while은 본문 실행 후 조건을 확인한다.

while은 0회 실행이 가능하다
03

상태 갱신

조건을 거짓으로 만들 수 있는 변화가 모든 경로에서 일어나는지 확인한다.

continue 경로도 progress 필요
04

탈출 경로

break, return, 예외가 loop invariant를 깨지 않고 빠져나가는지 본다.

RAII 또는 scope guard로 회수
입력 루프
실패 상태를 조건에 반영 stream 읽기는 값보다 스트림 상태를 조건으로 삼는 편이 안전하다.
while (cin >> x)
sentinel
특정 값으로 종료 종료 표식이 실제 데이터와 충돌하지 않는지 확인한다.
도메인 밖 값
do-while
메뉴처럼 최소 한 번 필요 본문에서 조건 변수 갱신이 빠지면 무한 반복이 된다.
menu retry 패턴
nested
안쪽 break 범위 점검 break는 가장 가까운 반복문만 빠져나가므로 flag나 함수 분리가 필요할 수 있다.
탈출 범위

0회·1회·continue·break 경로 테스트

0/1/N cases 0개, 1개, 마지막 원소 처리에서 조건이 맞는지 테스트한다.
progress update continue 경로에서도 반복 상태가 갱신되는지 확인한다.
break/return cleanup 조기 탈출 시 파일, lock, 버퍼 회수를 RAII 객체에 맡기는 구조인지 본다.

입력 루프 기본형

int value;
while (std::cin >> value) {
  // process only valid input
}