C++ 초급 - 3. 제어문 (1 - 조건문 (Conditional Statements))

2025. 2. 12. 12:28프로그래밍 언어/C++

3. 제어문 (Control Statements)

제어문은 프로그램의 흐름을 조정하는 역할을 하며,
조건에 따라 실행 경로를 변경하거나 특정 코드를 반복적으로 실행하는 데 사용된다.

📌 3.1 조건문 (Conditional Statements)

조건문(Conditional Statements)주어진 조건을 평가하여 코드 실행을 결정하는 역할을 한다.
즉, 특정 조건이 참(true)이면 실행하고, 거짓(false)이면 실행하지 않는 구조이다.

C++에서 대표적인 조건문은 다음과 같다.

  1. if-else 문
  2. switch-case 문

(1) if-else 문

if-else 문은 특정 조건이 true일 때 코드를 실행하고, false일 때 다른 코드를 실행하도록 제어한다.

📌 기본 구조

if (조건) {
    // 조건이 true일 때 실행되는 코드
} else {
    // 조건이 false일 때 실행되는 코드
}

📌 예제 1: 기본적인 if-else 사용

#include <iostream>

int main() {
    int age;
    std::cout << "나이를 입력하세요: ";
    std::cin >> age;

    if (age >= 18) {
        std::cout << "성인입니다." << std::endl;
    } else {
        std::cout << "미성년자입니다." << std::endl;
    }

    return 0;
}

🔹 입력 예시

나이를 입력하세요: 20

🔹 출력 결과

성인입니다.

📌 else if를 사용하여 여러 개의 조건 검사

else if를 사용하면 여러 개의 조건을 순차적으로 검사할 수 있다.

#include <iostream>

int main() {
    int score;
    std::cout << "점수를 입력하세요: ";
    std::cin >> score;

    if (score >= 90) {
        std::cout << "A 학점입니다." << std::endl;
    } else if (score >= 80) {
        std::cout << "B 학점입니다." << std::endl;
    } else if (score >= 70) {
        std::cout << "C 학점입니다." << std::endl;
    } else {
        std::cout << "F 학점입니다." << std::endl;
    }

    return 0;
}

🔹 입력 예시

점수를 입력하세요: 85

🔹 출력 결과

B 학점입니다.

💡 설명

  • 조건을 위에서부터 순서대로 검사하며 처음으로 true인 조건이 실행된다.
  • 한 번 실행된 이후에는 아래 조건을 더 이상 평가하지 않는다.

📌 중첩 if 문 (Nested if)

if 문 안에 또 다른 if 문을 작성하여 복잡한 조건을 처리할 수도 있다.

#include <iostream>

int main() {
    int age;
    bool hasID;

    std::cout << "나이를 입력하세요: ";
    std::cin >> age;
    std::cout << "신분증이 있습니까? (1: 예, 0: 아니오): ";
    std::cin >> hasID;

    if (age >= 18) {
        if (hasID) {
            std::cout << "입장 가능합니다." << std::endl;
        } else {
            std::cout << "신분증이 필요합니다." << std::endl;
        }
    } else {
        std::cout << "미성년자는 입장할 수 없습니다." << std::endl;
    }

    return 0;
}

🔹 입력 예시

나이를 입력하세요: 20
신분증이 있습니까? (1: 예, 0: 아니오): 0

🔹 출력 결과

신분증이 필요합니다.

💡 설명

  • if 문 안에 또 다른 if 문을 포함하여 두 가지 조건을 동시에 검사할 수 있다.

(2) switch-case 문

switch-case 문은 여러 개의 값과 변수를 비교할 때 사용된다.
if-else 문과 달리, switch 문은 정확한 값과 비교할 때 유용하다.

📌 기본 구조

switch (변수) {
    case 값1:
        // 값1일 때 실행할 코드
        break;
    case 값2:
        // 값2일 때 실행할 코드
        break;
    default:
        // 모든 case가 만족하지 않을 때 실행할 코드
}

💡 주의

  • case 뒤에는 변수 대신 상수(숫자, 문자)만 사용할 수 있다.
  • break;를 사용하지 않으면 다음 case 문까지 실행됨(의도하지 않은 결과 발생 가능).

📌 예제 1: switch-case를 이용한 메뉴 선택

#include <iostream>

int main() {
    int choice;

    std::cout << "메뉴를 선택하세요:\n";
    std::cout << "1. 피자\n";
    std::cout << "2. 햄버거\n";
    std::cout << "3. 치킨\n";
    std::cin >> choice;

    switch (choice) {
        case 1:
            std::cout << "피자를 선택하셨습니다." << std::endl;
            break;
        case 2:
            std::cout << "햄버거를 선택하셨습니다." << std::endl;
            break;
        case 3:
            std::cout << "치킨을 선택하셨습니다." << std::endl;
            break;
        default:
            std::cout << "올바른 번호를 입력하세요." << std::endl;
    }

    return 0;
}

🔹 입력 예시

2

🔹 출력 결과

햄버거를 선택하셨습니다.

📌 예제 2: switch-case를 이용한 문자 비교

#include <iostream>

int main() {
    char grade;

    std::cout << "학점(A, B, C, D, F)을 입력하세요: ";
    std::cin >> grade;

    switch (grade) {
        case 'A':
            std::cout << "훌륭합니다!" << std::endl;
            break;
        case 'B':
            std::cout << "좋은 성적입니다." << std::endl;
            break;
        case 'C':
            std::cout << "괜찮은 성적입니다." << std::endl;
            break;
        case 'D':
            std::cout << "조금 더 노력하세요." << std::endl;
            break;
        case 'F':
            std::cout << "재수강이 필요합니다." << std::endl;
            break;
        default:
            std::cout << "올바른 학점을 입력하세요." << std::endl;
    }

    return 0;
}

🔹 입력 예시

A

🔹 출력 결과

훌륭합니다!

💡 설명

  • switch-case 문에서 문자(char)도 비교할 수 있다.
  • default를 사용하면 어떤 case에도 해당하지 않을 때 실행되는 기본 동작을 지정할 수 있다.

📌 if-else vs switch-case 비교

구분  if-else 문 switch-case 문
사용 방식 논리 연산을 사용한 조건 검사 정확한 값과 변수 비교
조건 score >= 90, age < 18 case 1:, case 'A':
사용 예시 범위 검사 (나이, 점수 등) 메뉴 선택, 키 입력 검사
가독성 복잡한 조건에서 불리함 값이 많을 때 가독성 높음

💡 if-else는 논리식을 비교할 때 적합하고, switch-case는 여러 값을 비교할 때 더 적합하다.


정리

조건문  설명  사용 예제
if-else 특정 조건이 true일 때 실행 if (score >= 90) {...}
else if 여러 개의 조건 검사 else if (score >= 80) {...}
중첩 if 조건 안에 또 다른 조건 검사 if (age >= 18) { if (id) {...} }
switch-case 여러 개의 값과 비교 switch (choice) {...}