04. 조건문: 프로그램의 갈림길
"만약 ~라면?" 상황에 따라 다른 행동을 하도록 프로그램에 지능을 심어줍니다.
1. if 문: 진실 혹은 거짓
조건문 중에서 가장 기본이 되는 것이 if 문입니다. 괄호 안의 조건이 참(1)일 때만 중괄호 안의 코드를 실행합니다.
시작
↓
조건이 참인가?
YES
↓
코드 실행
NO
↓
그냥 통과
int score = 95;
if (score >= 90) {
printf("합격입니다! 우와!\n");
}
2. if-else 와 else if: 더 복잡한 선택
조건이 참일 때뿐만 아니라, **거짓일 때** 실행할 코드도 지정할 수 있습니다. 또한 여러 가지 조건을 줄줄이 검사할 수도 있죠.
💡 갈림길 비유
if: 정면에 길이 있으면 가라.
else if: (정면에 길이 없으면) 오른쪽 길은 있는가? 있다면 가라.
else: (모든 길이 없으면) 그냥 멈춰라.
int age = 15;
if (age >= 20) {
printf("성인입니다.\n");
} else if (age >= 14) {
printf("청소년입니다.\n");
} else {
printf("어린이입니다.\n");
}
3. 🎮 창의적 응용 예제 1: 던전 입구 판독기
사용자의 레벨을 입력받아, 특정 레벨 이상만 들어갈 수 있는 던전 시스템을 만들어 봅시다. 앞서 배운 system() 함수와 조합하면 더 재미있습니다!
#include <stdio.h>
#include <stdlib.h>
int main() {
int level;
printf("용사여, 레벨을 입력하라: ");
scanf("%d", &level);
if (level >= 50) {
printf("🔥 [전설의 용사 던전] 입장이 허용되었습니다!\n");
system("color 0C"); // 화면을 붉은색(위험)으로 변경
} else if (level >= 20) {
printf("⚔️ [중급자 던전] 입장이 허용되었습니다.\n");
system("color 0B"); // 화면을 청록색으로 변경
} else {
printf("💀 레벨이 너무 낮습니다. 수련하고 오세요!\n");
}
return 0;
}
4. switch 문: 명확한 메뉴 선택
검사할 조건이 특정 '값'으로 딱딱 떨어질 때(정수, 문자 등)는 if 보다 switch가 훨씬 깔끔합니다. 자판기 버튼을 누르는 것과 같습니다.
▲ switch 문: 입력된 번호(case)에 맞는 버튼을 즉시 누르는 것
int button = 2;
switch (button) {
case 1:
printf("콜라가 나옵니다.\n");
break; // break가 없으면 아래로 줄줄이 실행되니 주의!
case 2:
printf("사이다가 나옵니다.\n");
break;
default: // 어떤 case에도 해당하지 않을 때
printf("잘못된 버튼입니다.\n");
}
⚠️ break의 중요성!
break를 빠뜨리면 해당 case가 끝난 후에도 멈추지 않고 아래 case들까지 전부 실행해버립니다. 이를 'Fall-through'라고 부릅니다. 특별한 의도가 없다면 꼭 적어주세요!
5. 🍱 창의적 응용 예제 2: 오늘의 점심 메뉴 추천기
1~3 사이의 숫자를 입력하면 랜덤하게 메뉴를 골라주는 (것처럼 보이는) 프로그램을 만들어 봅시다.
#include <stdio.h>
int main() {
int pick;
printf("--- [오늘 뭐 먹지?] ---\n");
printf("1~3 중 행운의 숫자를 고르세요: ");
scanf("%d", &pick);
switch (pick) {
case 1:
printf("🍱 오늘은 따뜻한 국밥 어떠세요?\n");
break;
case 2:
printf("🍕 치즈가 듬뿍 들어간 피자 추천!\n");
break;
case 3:
printf("🍣 신선한 초밥이 당신을 기다립니다.\n");
break;
default:
printf("🤔 배가 안 고프신가 보군요?\n");
}
return 0;
}
6. 🧮 보너스: 미니 사칙연산 계산기
입력받은 기호(+, -, *, /)에 따라 다른 계산을 수행하는 프로그램을 switch와 char 자료형으로 만들어 봅시다.
#include <stdio.h>
int main() {
char op;
int n1, n2;
printf("계산식 입력 (예: 10 + 5): ");
scanf("%d %c %d", &n1, &op, &n2);
switch (op) {
case '+': printf("결과: %d\n", n1 + n2); break;
case '-': printf("결과: %d\n", n1 - n2); break;
case '*': printf("결과: %d\n", n1 * n2); break;
case '/':
if (n2 != 0) printf("결과: %d\n", n1 / n2);
else printf("0으로 나눌 수 없습니다!\n");
break;
default: printf("잘못된 연산자입니다.\n");
}
return 0;
}