조건 안에 조건이 또 있을 수 있을까?
프로그래밍에서는 하나의 조건만으로는 부족한 경우가 많습니다.
예를 들어 “점수가 60점 이상이고, 그 안에서도 90점 이상이면 A등급, 아니면 B등급” 같은 상황처럼 말이죠.
이런 다단계 조건을 처리할 때 사용하는 것이 바로 **중첩 if문(Nested if statement)**입니다.
● 중첩 if문이란?
중첩 if문은 if문 안에 또 다른 if문을 넣는 구조를 말합니다.
if (조건1) {
if (조건2) {
// 조건1과 조건2가 모두 참일 때 실행
}
}
● 예제: 점수에 따라 등급 출력
int score = 85;
if (score >= 60) {
if (score >= 90) {
printf("A등급\n");
} else {
printf("B등급\n");
}
} else {
printf("불합격\n");
}
- 90점 이상 → A등급
- 60점 이상 90점 미만 → B등급
- 60점 미만 → 불합격
● 중첩 if문의 흐름
[조건1]이 참인가?
└─ 예 → [조건2] 검사
└─ 참 → 실행
└─ 거짓 → else 블록 (조건1이 참이었을 경우)
└─ 아니오 → 조건1의 else 블록 실행
● 중괄호를 반드시 써야 하는 이유
중첩 if문은 구조가 복잡해지기 쉬워서, 괄호 {}를 생략하면 예기치 않은 결과가 나올 수 있습니다.
if (a > 0)
if (a < 10)
printf("OK");
else
printf("X"); // 어떤 if의 else인지 헷갈릴 수 있음
이런 코드는 반드시 괄호로 구조를 명확히 해야 합니다.
if (a > 0) {
if (a < 10) {
printf("OK");
} else {
printf("X");
}
}
● 실전 예제: 로그인 성공 여부 확인
int id = 1;
int pw = 1234;
if (id == 1) {
if (pw == 1234) {
printf("로그인 성공\n");
} else {
printf("비밀번호 오류\n");
}
} else {
printf("아이디 오류\n");
}
● 중첩을 많이 쓰면 코드가 복잡해지기도…
너무 많은 if문을 중첩하면 가독성이 떨어지고 버그 발생 위험도 커지기 때문에,
가능하면 else if나 switch로 바꾸는 것도 고려해야 합니다.
중첩은 꼭 필요한 경우에만 사용하는 것이 좋아요.
● 정리하며
중첩 if문은 조건 안에 조건을 검사해야 할 때 사용하는 구조입니다.
조건이 여러 단계로 분리되어 있는 상황에서 매우 유용하게 사용할 수 있지만,
괄호 사용을 철저히 하고, 가독성을 유지하는 구조로 작성하는 습관이 중요합니다.
실습 문제
아래 문제는 직접 코드를 작성해보고, 실행 결과를 확인한 후 스스로 정답을 유추해보는 형태입니다.
정답은 바로 아래에서 확인할 수 있습니다.
문제 1
정수형 변수 score가 60점 이상이면 "합격"을 출력하고, 그 안에서도 90점 이상이면 "우수"도 함께 출력하는 중첩 if문을 작성하세요.
문제 2
다음 코드의 출력 결과는 무엇인가요?
int age = 25;
int gender = 1; // 1: 남자, 0: 여자
if (age >= 20) {
if (gender == 0) {
printf("성인 여성\n");
} else {
printf("성인 남성\n");
}
}
문제 3
a = 3, b = 4일 때,
a가 짝수이고 b가 짝수면 "둘 다 짝수"를 출력하는 중첩 if문을 작성해보세요.
문제 4
다음 코드에서 "정상 접근"이 출력되도록 id와 pw의 값을 설정하세요.
int id = ?;
int pw = ?;
if (id == 1001) {
if (pw == 1234) {
printf("정상 접근\n");
} else {
printf("비밀번호 오류\n");
}
} else {
printf("아이디 오류\n");
}
문제 5
다음 중 중괄호 생략으로 인해 출력 결과가 의도와 달라질 수 있는 코드는?
A.
if (a > 0)
if (a < 10)
printf("OK");
else
printf("X");
B.
if (x > 0) {
if (x < 10) {
printf("OK");
} else {
printf("X");
}
}
▶ 정답 확인하기
정답 1
int score = 92;
if (score >= 60) {
printf("합격\n");
if (score >= 90) {
printf("우수\n");
}
}
정답 2
출력: 성인 남성
설명: age >= 20 참, gender == 0 거짓 → else 실행
정답 3
int a = 3, b = 4;
if (a % 2 == 0) {
if (b % 2 == 0) {
printf("둘 다 짝수\n");
}
}
(※ a가 3이므로 실제론 출력 없음)
정답 4
int id = 1001;
int pw = 1234;
정답 5
정답: A
설명: else가 어느 if에 속하는지 명확하지 않음
→ 괄호로 구분하지 않으면 의도와 다른 결과가 나올 수 있음
'프로그래밍언어 > C언어[초급]' 카테고리의 다른 글
[C언어][초급] Chapter26. 조건문 – switch 문 사용법과 특징 (0) | 2025.04.17 |
---|---|
[C언어][초급] Chapter25. 조건문 – else if 사용법과 순차 조건 분기 구조 (0) | 2025.04.17 |
[C언어][초급] Chapter23. 조건문 – if-else 문 사용법과 예제 (0) | 2025.04.17 |
[C언어][초급] Chapter22. 조건문 – if문 사용법과 기본 구조 (0) | 2025.04.16 |
[C언어][초급] Chapter21. 연산자 우선순위와 괄호 사용 – 계산 순서를 정확히 이해하자 (0) | 2025.04.16 |