코드를 작성할 때 특정 동일한 작업을 반복해야 할 때가 많다. 이럴 때는 직접 하나하나 문장을 작성하는 것이 아니라 반복문을 이용하면 코드를 훨씬 간결하고 읽기 쉽게 작성할 수 있다. 반복문의 종류는 for, while, do~while이 있다.
for문
for(int i = 1; i < 10; i++;) { std::cout<<i<<std::endl; }
for문은 초기화식, 반복조건식, 변화식 세가지 조건이 필요하다. 위의 코드에서 int i=1이 초기화식, i<10이 반복조건식, i++가 변화식이다. int i는 반복에 사용할 변수이고 1로 초기화 되었다. 반복조건식이 참(true)일 때 {}블록 안의 문장이 실행된다. 마지막으로 반복할 때마다 i++로 i의 값을 1씩 늘리고 있다. 여기선 후위 증가연산자를 사용했지만 전위 증가연산자를 사용하여도 무방하다. 반복할 때마다 변수 i의 값이 1씩 증가되고 마지막으로 i<10가 참이 아닐 때, 즉 10이 되는 순간 반복이 종료되고 for문 다음 문장으로 넘어간다. 여기서는 변수 i를 출력하는 문장을 반복하였지만 i는 굳이 출력이 아니더라도 반복하는 횟수로 사용된다는 점을 알아두어야 한다. 또한 for문은 범위기반형식으로도 사용할 수 있다. 이것은 이후 포스팅 때 다룰 예정이다.
while문
int i = 1; while(i < 10) { std::cout<<i<<std::endl; i++; }
while문도 for문과 마찬가지로 조건식에 의해서 반복이 실행된다. 위의 코드에서 i<10이 조건식이고 이 조건식이 참일때만 {}블록 안의 문장들이 반복된다. for문과 달리 while문 밖에서 변수가 선언된 것을 주의 깊게 봐야한다. for문의 경우 for문에서 반복을 위해 선언된 변수는 반복이 끝난 후 메모리에서 사라진다. 하지만 while문의 경우엔 while문 밖에서 변수가 선언되기 때문에 while문의 반복이 끝나더라도 그 변수는 그대로 남아있다. 또한 while문 블록 안에서 i++로 i의 값을 직접 변화시키고 있다. 이 변화식이 없다면 while문의 조건식은 거짓(false)이 될 수 없고 영원히 반복이 실행되기 때문에 반드시 직접 변화시켜주어야 한다.
이러한 특징은 올바른 입력이 있을 때 까지 반복하는 코드를 작성할 때 유용하게 사용될 수 있다.
int i = 1; while(i != 0) { std::cin>>i; }
위의 코드는 사용자가 변수 i에 0을 입력할 때까지, 즉 조건 (i != 0)가 거짓이 될 때까지 무한히 반복되는 코드이다. 이런 형태로 올바른 입력이나 값의 반환이 있을 때까지 반복하는 코드를 작성할 수 있다.
do~while문
int i = 1; do { std::cout<<i<<std::endl; i++; } while(i < 10);
do~while문은 조건식의 평가 전에 최소한 한번 do 블록안의 문장을 먼저 실행시킨다. 그 후 while의 조건식이 거짓이 될 때까지 do 블록 안의 문장을 반복 실행한다. 조건식을 먼저 평가하는 while문과 달리 최소 한번이라도 do 블록안의 문장을 먼저 실행시킨 후 조건식을 평가하기 때문에 상황에 맞게 사용하면 된다.