C 언어에서 중첩 if(nested if)란 하나의 if 문이 다른 if 문 또는 else 문의 내부에 포함된 형태를 말합니다. 즉, 'if'가 또 다른 'if' 또는 'else' 블록 안에 위치하는 구조로, 여러 조건을 단계별로 검사해야 할 때 매우 유용하게 사용됩니다.
중첩 if-else 문법
중첩 if-else 문의 기본적인 문법은 다음과 같습니다.
if (조건1){
if (조건2)
문장1;
else
문장2;
}
else{
if (조건3)
문장3;
else
문장4;
}
바깥쪽 조건(조건1)이 참이면 안쪽 첫 번째 if 블록이 평가되고, 거짓이면 else 블록 안의 조건(조건3)이 평가됩니다. 이처럼 조건 검사가 계층적으로 이루어지기 때문에 복잡한 의사 결정 로직도 명확하게 표현할 수 있습니다.
예제 1: 세 개의 수 중 최댓값 구하기
다음은 중첩 if-else 조건문을 사용하여 입력받은 세 개의 정수 중 가장 큰 값을 찾는 C 프로그램입니다.
#include <stdio.h>
int main() {
int a, b, c;
printf("a, b, c의 값을 입력하세요: \n");
scanf("%d %d %d", &a, &b, &c);
if (a > b) {
if (a > c) {
printf("%d이(가) 가장 큰 수입니다\n", a);
} else {
printf("%d이(가) 가장 큰 수입니다\n", c);
}
} else {
if (b > c) {
printf("%d이(가) 가장 큰 수입니다\n", b);
} else {
printf("%d이(가) 가장 큰 수입니다\n", c);
}
}
return 0;
}
실행 결과
a, b, c의 값을 입력하세요: 3 5 8 8이(가) 가장 큰 수입니다
위 프로그램은 먼저 a와 b를 비교한 뒤, 그 결과에 따라 안쪽 if 문에서 나머지 값과의 비교를 진행합니다. 비교를 단계적으로 수행함으로써 발생 가능한 모든 경우의 수를 빠짐없이 처리할 수 있습니다.
예제 2: 양수, 음수, 0 판별하기
다음은 입력받은 숫자가 양수인지 음수인지(또는 0인지) 판별하는 C 프로그램입니다.
#include <stdio.h>
int main() {
int num;
printf("숫자를 입력하세요:\n ");
scanf("%d", &num);
if (num > 0) {
printf("입력한 %d은(는) 양수입니다\n", num);
} else if (num < 0) {
printf("입력한 %d은(는) 음수입니다\n", num);
} else {
printf("입력한 수는 0입니다\n");
}
return 0;
}
실행 결과
실행 1: 숫자를 입력하세요: 23 입력한 23은(는) 양수입니다 실행 2: 숫자를 입력하세요: -56 입력한 -56은(는) 음수입니다
이 예제에서는 if - else if - else 구조를 사용하여 양수, 음수, 0이라는 세 가지 경우를 모두 처리했습니다. 중첩 if-else를 활용하면 이처럼 서로 배타적인 여러 조건을 깔끔하게 분기 처리할 수 있습니다.
중첩 if-else 작성 시 주의 사항
중첩 if-else 문을 작성할 때는 들여쓰기를 일관되게 유지하는 것이 중요합니다. 블록이 깊어질수록 어떤 else가 어떤 if에 속하는지 혼동하기 쉬우므로, 중괄호({ })를 명확히 사용하면 코드의 가독성과 유지보수성이 크게 향상됩니다.
또한 조건이 지나치게 많아져 중첩 깊이가 3단계 이상 깊어진다면, 논리 연산자(&&, ||)를 활용해 조건을 결합하거나 함수로 분리하는 방식을 고려하는 것이 좋습니다.