조건문 (if/switch)
지난 편에서는 printf와 scanf로 화면에 값을 출력하고 사용자로부터 값을 입력받는 방법을 배웠습니다. 그런데 지금까지 작성한 프로그램은 위에서 아래로 순서대로만 실행되었죠. 이번에는 “조건에 따라 다른 코드를 실행”할 수 있게 해주는 조건문, 즉 if와 switch에 대해 알아보겠습니다. 조건문을 배우고 나면 사용자의 입력값이나 계산 결과에 따라 프로그램이 스스로 판단해서 다르게 동작하도록 만들 수 있습니다.
if문, 참/거짓을 판단해서 갈림길 만들기
if문은 괄호 안의 조건식이 참(0이 아닌 값)이면 중괄호 블록을 실행하고, 거짓(0)이면 실행하지 않는 가장 기본적인 조건문입니다.
int score = 85;
if (score >= 60) {
printf("합격입니다.\n");
}
여기에 else를 붙이면 조건이 거짓일 때 실행할 코드를 지정할 수 있고, else if를 중간에 넣으면 여러 조건을 순서대로 검사할 수 있습니다.
int score = 72;
if (score >= 90) {
printf("A학점\n");
} else if (score >= 80) {
printf("B학점\n");
} else if (score >= 70) {
printf("C학점\n");
} else {
printf("D학점\n");
}
여기서 중요한 점은 else if는 위에서부터 순서대로 검사하다가 조건이 처음 참이 되는 곳에서 멈춘다는 것입니다. 그래서 조건을 큰 값부터 작은 값 순서로 배치해야 원하는 결과가 나옵니다. 만약 순서를 뒤바꿔서 score >= 70을 맨 위에 두면, 90점을 받은 학생도 무조건 “C학점”으로 판정되어 버립니다.
switch문, 값에 따라 여러 갈래로 나누기
조건이 “특정 변수의 값이 무엇이냐”를 비교하는 경우가 많다면 switch문이 if-else보다 훨씬 깔끔합니다.
int day = 3;
switch (day) {
case 1:
printf("월요일\n");
break;
case 2:
printf("화요일\n");
break;
case 3:
printf("수요일\n");
break;
default:
printf("알 수 없는 요일\n");
break;
}
switch를 쓸 때 가장 많이 하는 실수가 break를 빼먹는 것입니다. break가 없으면 해당 case가 실행된 뒤에도 멈추지 않고 바로 아래에 있는 case까지 계속 실행되어 버립니다. 이를 “fall-through”라고 부르는데, 의도적으로 여러 case를 묶어서 같은 동작을 시키고 싶을 때 외에는 항상 break를 챙겨줘야 합니다.
예제 코드로 확인해보기
if와 switch를 함께 활용해서 간단한 성적 처리 프로그램을 만들어 보겠습니다.
#include <stdio.h>
int main(void) {
int score;
char grade;
printf("점수를 입력하세요: ");
scanf("%d", &score);
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else {
grade = 'F';
}
printf("학점: %c\n", grade);
switch (grade) {
case 'A':
case 'B':
printf("우수한 성적입니다!\n");
break;
case 'C':
printf("조금만 더 노력해봐요.\n");
break;
default:
printf("재수강을 고려해보세요.\n");
break;
}
return 0;
}
코드 동작 설명 및 실행 결과
- 먼저
scanf로 점수를 입력받아if-else if구조로 90점 이상은 A, 80점 이상은 B, 70점 이상은 C, 그 미만은 F로 분류합니다. - 그다음
switch (grade)에서는case 'A':바로 다음에break없이case 'B':가 이어지는데, 이는 A와 B학점을 받은 사람에게 똑같이 “우수한 성적입니다!”를 출력하려는 의도적인 fall-through입니다. - 이 코드를
gcc conditionals.c -o conditionals로 컴파일하고 실행한 뒤 “85”를 입력하면 다음과 같은 결과가 나옵니다.
점수를 입력하세요: 85
학점: B
우수한 성적입니다!
만약 “65”를 입력했다면 grade는 'F'가 되고, switch문에서는 어떤 case에도 해당하지 않으므로 default 블록이 실행되어 “재수강을 고려해보세요.”가 출력됩니다.
핵심 요약
if-else if-else는 조건을 위에서부터 순서대로 검사하며, 조건 순서를 잘못 배치하면 의도와 다른 결과가 나올 수 있습니다.switch문은 하나의 변수 값을 여러 경우와 비교할 때if-else보다 가독성이 좋습니다.switch문의 각case에는 반드시break를 넣어야 다음case로 넘어가지 않으며, 의도적으로 여러case를 묶고 싶을 때만break를 생략합니다.- 조건문을 잘 활용하면 프로그램이 입력값이나 상태에 따라 다르게 동작하도록 만들 수 있습니다.
다음 편에서는 같은 코드를 여러 번 반복해서 실행하는 방법, “반복문 (for/while/do-while)”에 대해 알아보겠습니다. 오늘 배운 조건문과 결합하면 특정 조건을 만족할 때까지 반복하는 훨씬 강력한 프로그램을 만들 수 있습니다.