영어로는 루프문이라고도 한다.
유사한 동작을 반복 실행하는 것이 필요할 때 주로 사용하는 구문이다.
C언어에서 반복문은 for, while, 그리고 do-while문이 기본적으로 존재한다.
for문은 주로 정해진 횟수를 반복할 때 유용하다.
for (int i = 0; i < 5; i++)
반복할 구문();
여기에서 int i = 0; 부분을 초기식이라 부르고, i < 5; 부분을 조건식, i++ 부분을 변화식이라고 부른다.
초기식은 일반적으로 반복문의 조건과 관련한 변수를 생성 또는 초기화 할 때 사용되고 주로 int i = 0; 처럼 정수형 변수를 생성하는 식을 주로 사용한다. 물론 미리 선언한 변수를 사용할 때 i = 0; 처럼 초기화만 시켜주어도 된다.
조건식은 반복될 조건을 나타내며, 조건식이 참일 경우 반복하고, 거짓일 경우 반복문을 끝낸다.
변화식은 반복문이 한 번 실행될 때마다 수행할 식이다. 보통 증가 연산자 ++를 사용하여 변수의 값을 1씩 증가시키거나 감소 연산자 --를 이용해 변수의 값을 감소하는 형태로 사용한다.
반복할 문장이 여러개일 경우 if문처럼 중괄호로 묶어주면 된다.
for (초기식; 조건식; 변화식) {
반복할 구문 1();
반복할 구문 2();
...
}
이를 통해 무한정으로 반복하는 반복문도 만들 수 있는데, 아래와 같이 작성하면 된다. (권장하지는 않는다)
for (;;) {
반복할 구문 1();
반복할 구문 2();
...
}
더 나아가, for문은 초기식을 실행하고 반복할 구문을 실행하고 변화식을 실행한 후 조건이 참인지 거짓인지 판단한 후 참일 경우 또 다시 반복할 구문을 실행하고 변화식을 실행하는 과정으로 반복한다.
참고 : 실행되고 있는 프로그램을 강제 종료하는 단축키는 ctrl + c이다.
주로 for 문이 아닌 반복문을 쓸 때 사용한다.
기본 꼴은 아래와 같다.
while (조건) {
반복할 구문 1();
반복할 구문 2();
...
}
조건은 if 문에서 조건을 작성하는 것과 동일하다.
물론 반복할 구문이 한 문장일 경우 아래와 같이 간소화해서 작성할 수 있다.
while (조건)
반복할 문장();
while 문의 실행 과정은 조건이 참인지 거짓인지 판단하고 참일경우 루프 내부의 문장을 실행한 후 또 다시 조건을 판단하는 과정으로 반복된다.
do-while문은 while문과 달리 문장을 실행한 후 조건을 판별한다. (따라서 애초에 조건을 충족하지 않더라도 적어도 1회는 실시한다는 것이 큰 차이점이다)
기본 꼴은 아래와 같다.
do {
반복할 구문 1();
반복할 구문 2();
...
} while (조건);
조건은 if 문에서 조건을 작성하는 것과 동일하며, 반복할 구문이 한 문장일 경우 아래와 같이 작성할 수 있다.
do
반복할 문장();
while (조건);
do-while 문은 위에서 언급한 바와 마찬가지로 루프 내부의 문장을 먼저 실행한 후 조건을 판별하고 참일경우 루프 내부 문장을 실행하는 방식으로 반복한다.
하나의 루프를 탈출하는 구문이다.
예시를 참조해 보자.
for (;;)
break;
위의 소스코드를 분석해 보면 break; 없이 for(;;)만 존재할 경우 무한 루프에 빠지게 된다.
하지만 break;가 존재함으로서 무한 루프에 빠지지 않고 바로 빠져나올 수 있게 할 수 있다.
일반적으로 if문과 엮여 어떤 조건을 만족했을 때 루프를 빠져나오게 하는 용도로 이용된다.
분기문이란 조건에 따라 굉장히 다양한 분기로 나뉘는 구문을 말한다.
switch-case문으로도 불리며, 아래와 같이 사용한다.
switch (조건) {
case 첫번째 경우:
실행할 구문1();
실행할 구문2();
실행할 구문3();
실행할 구문4();
...
break;
case 두번째 경우:
실행할 구문1();
실행할 구문2();
실행할 구문3();
실행할 구문4();
...
break;
...
default: // 어떠한 경우도 만족하지 않았을 경우
실행할 구문1();
실행할 구문2();
실행할 구문3();
실행할 구문4();
...
break;
}
실행할 구문의 마지막에 break;를 넣어주지 않을 경우 아래의 분기까지 참인지 거짓인지 모두 탐색하기 때문에 비효율적이고, 또 이로 인한 오류가 발생할 수 있다.
또한, 여기서 default는 생략 가능하다.
예제를 살펴보면서 더욱 더 정확히 이해해 보자.
#include <stdio.h>
int main() {
char a = 'Y';
switch (a) {
case 'Y':
printf("This is Y");
break;
case 'Z':
printf("This is Z");
break;
default:
printf("Nothing");
break;
}
}
코딩 도장. (2016). https://dojang.io/mod/page/view.php?id=206.
LJLee37 (Github : https://github.com/LJLee37, Twitch : https://www.twitch.tv/ljlee37)