본문 바로가기
프로그래밍언어/C언어[초급]

[C언어][초급] Chapter24. 조건문 – 중첩 if문 사용법과 주의할 점

by about_IT 2025. 4. 17.
728x90

조건 안에 조건이 또 있을 수 있을까?
프로그래밍에서는 하나의 조건만으로는 부족한 경우가 많습니다.
예를 들어 “점수가 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에 속하는지 명확하지 않음
→ 괄호로 구분하지 않으면 의도와 다른 결과가 나올 수 있음

728x90