language/c++

[C++] 02. 조건문과 반복문

렁치 2026. 7. 21. 11:30

조건에 따라 흐름을 나누고(조건문) 같은 일을 반복하는(반복문) 제어 구조는 C++에서도 핵심이다. 문법 자체는 C와 거의 같아서, C를 다뤄봤다면 빠르게 넘어갈 수 있다. 오늘은 핵심 문법을 정리하고, C++만의 편의 기능을 덧붙였다.


1. 조건문

if / else if / else

if (조건) {
    ...
} else if (조건2) {
    ...
} else {
    ...
}

 

위에서부터 검사해 처음 참이 되는 가지만 실행한다. 점수로 학점 매기듯, 조건이 겹치지 않게 범위를 나눠 배치하는 것이 요령이다.

switch ~ case

하나의 변수를 여러 특정 값과 비교할 때 쓴다.

switch (변수) {
    case 1: ...; break;
    case 2: ...; break;
    default: ...;
}

 

case 끝의 break를 잊지 말 것
각 case 끝에 break가 없으면, 일치한 case부터 아래로 break를 만날 때까지 줄줄이 실행된다(fall-through). 의도하지 않았다면 반드시 break를 넣어야 한다. default는 어느 case에도 맞지 않을 때 실행된다.

2. 반복문

반복문 형태 용도
for for(초기; 조건; 증감) 횟수가 정해진 경우
while while(조건) 조건을 먼저 검사
do-while do { ... } while(조건); 최소 1회 실행 후 검사

 

for (int i = 0; i < 10; i++)
    cout << i + 1 << " ";          // 1~10 출력

int i = 1;
while (i <= 10) {
    cout << i << " ";
    i++;
}

 

세 반복문은 서로 바꿔 쓸 수 있지만, "횟수가 정해졌으면 for, 조건으로만 돌면 while, 최소 한 번은 돌아야 하면 do-while"이라는 관례를 따르면 의도가 잘 드러난다.

 

중첩 반복문으로 구구단 같은 2차원 패턴을 만든다.

for (int iDanIndex = 0; iDanIndex < 8; iDanIndex++) {
    int iDan = iDanIndex + 2;

    for (int iMulIndex = 0; iMulIndex < 9; iMulIndex++) {
        int iMul = iMulIndex + 1;
        cout << iDan << " x " << iMul << " = " << iDan * iMul << endl;
    }

    cout << endl;
}

break와 continue

  • break: 반복문을 즉시 빠져나온다.
  • continue: 이번 반복의 남은 부분만 건너뛰고 다음 반복으로 넘어간다.

3. 수업 코드로 보는 카페 메뉴 반복

while, if, switch를 모두 묶은 실습이다. 메뉴를 반복 출력하고, 0을 입력하면 반복을 빠져나와 총 판매 금액을 출력한다.

#include <iostream>
using namespace std;

int main()
{
    int iMenuNo;
    int iPriceAmericano;
    int iPriceLatte;
    int iPriceIceTea;
    int iSumPrice;
    int iCountAmericano;
    int iCountLatte;
    int iCountIceTea;

    iPriceAmericano = 1500;
    iPriceLatte = 2000;
    iPriceIceTea = 3000;
    iSumPrice = 0;
    iCountAmericano = 0;
    iCountLatte = 0;
    iCountIceTea = 0;

    while (true)
    {
        cout << "1. 아메리카노 " << iPriceAmericano << "원" << endl;
        cout << "2. 카페라떼 " << iPriceLatte << "원" << endl;
        cout << "3. 아이스티 " << iPriceIceTea << "원" << endl;
        cout << "메뉴를 입력하세요(0 종료): ";
        cin >> iMenuNo;

        if (iMenuNo == 0)
        {
            break;
        }

        switch (iMenuNo)
        {
        case 1:
            iCountAmericano = iCountAmericano + 1;
            iSumPrice = iSumPrice + iPriceAmericano;
            break;
        case 2:
            iCountLatte = iCountLatte + 1;
            iSumPrice = iSumPrice + iPriceLatte;
            break;
        case 3:
            iCountIceTea = iCountIceTea + 1;
            iSumPrice = iSumPrice + iPriceIceTea;
            break;
        default:
            cout << "없는 메뉴입니다." << endl;
            break;
        }
    }

    cout << "총 판매 금액: " << iSumPrice << "원" << endl;

    return 0;
}

 

if (iMenuNo == 0)switch보다 먼저 둔 이유는 0이 메뉴가 아니라 종료 신호이기 때문이다. 입력 직후 종료 판단을 먼저 하는 구조는 반복문에서 가장 중요한 습관이다.


오늘 느낀 점

  • 조건문·반복문은 C와 거의 똑같아서, C에서 익힌 게 그대로 통했다. 새로 배우는 부담 없이 C++ 문법에 적응하는 발판이 됐다.
  • 대신 C++엔 bool 타입과 cout이 있어, 같은 로직도 의도가 더 또렷하게 드러난다는 차이를 느꼈다.
  • 범위 기반 for문 같은 C++만의 편의 기능은, "C의 익숙함 위에 더 안전한 도구가 얹힌다"는 인상이었다.

한 걸음 더

  • C++11부터는 범위 기반 for문(range-based for)이 추가됐다. 배열이나 컨테이너의 요소를 인덱스 없이 순회한다. for (int x : arr) cout << x;처럼 쓰면 arr의 모든 원소를 차례로 돈다. 인덱스 실수를 줄이고 코드가 간결해져, 현대 C++에서 즐겨 쓴다.
  • 조건식에서 정수 0은 거짓, 0이 아니면 참으로 취급되는 건 C와 같다. 다만 C++엔 bool 타입이 있어 if (isReady)처럼 참거짓 의도를 더 분명히 드러낼 수 있다. 비교 결과(a > b)도 bool 값(true/false)으로 나온다.
  • switch의 조건에는 정수나 열거형(enum), 문자처럼 이산적인 값만 올 수 있다. "점수가 60 이상" 같은 범위 조건이나 문자열 비교는 switch로 못 하고 if-else로 풀어야 한다. 분기 대상이 딱 떨어지는 값들이면 switch, 범위·복합 조건이면 if가 어울린다.