프로그래밍에서 제어문은 코드의 실행 흐름을 바꾸는 문법이다. 단순히 위에서 아래로 흐르는 방식이 아니라, 조건에 따라 분기하거나, 특정 코드를 반복 실행하도록 할 수 있다.
C언어의 제어문은 크게 세 가지로 나뉜다: 조건문
, switch문
, 반복문
.
if
문은 주어진 조건이 참일 때만 코드 블록을 실행한다.
예를 들어, 변수 a가 양수일 때만 출력하고 싶다면 이렇게 작성한다.
if (a > 0) {
printf("양수입니다.\n");
}
조건이 거짓일 때 실행할 코드가 있다면 else
를 붙이면 된다.
if (a > 0) {
printf("양수입니다.\n");
} else {
printf("음수거나 0입니다.\n");
}
조건이 여러 단계로 나뉠 경우에는 else if
를 사용하여 조건을 순차적으로 검사할 수 있다. 아래는 성적에 따라 등급을 출력하는 예제다.
if (score >= 90) {
printf("A 학점\n");
} else if (score >= 80) {
printf("B 학점\n");
} else {
printf("C 이하 학점\n");
}
위 코드는 score가 90 이상이면 "A 학점"을 출력하고, 그렇지 않으면 80 이상인지 또 확인한 뒤 "B 학점"을 출력한다. 그 외의 경우는 모두 "C 이하 학점"으로 처리된다.
switch
문은 여러 개의 정수(또는 문자) 값 중 하나에 따라 분기할 때 사용된다. if문보다 코드가 깔끔해지는 장점이 있다.
int menu = 2;
switch (menu) {
case 1:
printf("새 게임 시작\n");
break;
case 2:
printf("불러오기\n");
break;
case 3:
printf("종료\n");
break;
default:
printf("잘못된 선택\n");
}
각 case
는 menu
값이 해당 숫자일 때 실행되는 코드다.
주의할 점은 break
를 꼭 써줘야 한다는 것. break가 없으면 다음 case의 코드까지 모두 실행되는 fall-through
현상이 발생한다.
default는 위의 어떤 case에도 해당하지 않을 때 실행되는 블록이다.
간혹, 강제로 fall-through를 발생시키기도 하지만, 참고만 해두자.
같은 작업을 반복해야 할 때는 반복문을 사용한다.
C언어에는 for
, while
, do-while
세 가지 반복문이 있다.
for (int i = 0; i < 5; i++) {
printf("%d\n", i); //for문이 반복되면서 0 1 2 3 4 가 출력
}
int i = 0;
while (i < 5) {
printf("%d\n", i);
i++;
}
while
문은 조건이 참일 경우 계속 반복한다. for문보다 유연하지만, 초기화나 증감식을 빠뜨리면 무한 루프가 발생할 수 있으니 주의해야 한다.
int i = 0;
do {
printf("%d\n", i);
i++;
} while (i < 5);
do-while
은 조건이 나중에 검사되기 때문에, 조건이 처음부터 거짓이어도 최소 한 번은 실행된다는 점이 특징이다.
사실상 do를 제외하고 작성해도 된다. 다만, 이 코드들이 하나의 묶음이라는 것을 표현하기에는 용이하다.
반복문 안에서는 흐름을 바꾸는 break와 continue를 사용할 수 있다.
for (int i = 0; i < 5; i++) {
if (i == 2) continue; // i가 2일 땐 아래 코드 건너뛰고 다음 반복
if (i == 4) break; // i가 4일 땐 반복문 즉시 종료
printf("%d\n", i);
}
이 코드는 다음과 같이 출력된다.
0
1
3
제어문은 C언어를 이용해 "생각하는 코드"를 만들 수 있게 해주는 기본 도구다. 조건문으로 상황별 분기, 반복문으로 효율적인 반복 처리를 익혀두면, 이후 함수, 배열, 포인터 같은 개념들도 훨씬 자연스럽게 이해할 수 있게 된다.
@nullvuild