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에도 맞지 않을 때 실행된다.
각 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가 어울린다.