본문 바로가기

Programming Language/C

조건문

1. if문

if문은 내부의 조건을 검사해서 프로그램의 진행 경로를 결정합니다. 또한 조건의 개수가 많지 않을 때 사용하는 것이 적합합니다. if문은 아래와 같은 형식으로 작성됩니다.

if (조건1) {
    // 조건1에 부합할 때
}
else if (조건2) {
    // 조건1에 부합하지 않지만 조건2에 부합할 때
}
else {
    // 위 조건들에 모두 부합하지 않을 때
}

예제를 통해서 if문이 어떻게 돌아가는지 알아보겠습니다.

1.1. 예제 1

가게에 손님이 왔을 때 2명 이하는 2인석으로, 3명 또는 4명일 때는 4인석으로, 5명 이상은 대형석으로 안내해주는 프로그램을 만들어 보겠습니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
    printf("몇 명이세요? ");
    int a;
    scanf("%d", &a);
    if (a == 1 || a == 2) {
        printf("2인석으로 안내합니다.\n");
    }
    else if (a == 3 || a == 4) {
        printf("4인석으로 안내합니다.\n");
    }
    else if (a > 4) {
        printf("대형석으로 안내합니다.\n");
    }
    else {
        printf("숫자가 잘못 입력되었습니다.\n");
    }
    system("pause");
}

결과:

몇 명이세요? 3
4인석으로 안내합니다.
계속하려면 아무 키나 누르십시오 . . .

마지막 else에는 양의 정수가 아닌 수를 입력했을 때를 고려하여 넣었습니다. 양의 정수가 아닌 수를 입력했을 때 다시 "몇 명이세요?"를 묻는 질문으로 돌아가지는 않고 프로그램은 종료됩니다.

1.2. 예제 2

사용자로부터 메인 메모리의 크기를 입력받아 16gb 이상이면 크기가 충분하다는 문장을 출력하도록 하고 16gb 미만이라면 메모리를 증설하라는 메시지를 출력할 수 있도록 합니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
    int a;
    printf("메인 메모리의 크기를 입력하세요.(GB) ");
    scanf("%d", &a);
    if (a >= 16) {
        printf("메인 메모리의 크기가 충분합니다.\n");
    }
    else {
        printf("메인 메모리를 증설하세요.\n");
    }
    system("pause");
}

결과:

메인 메모리의 크기를 입력하세요.(GB) 64
메인 메모리의 크기가 충분합니다.
계속하려면 아무 키나 누르십시오 . . .

위 코드에서 if문을 여러 번 작성하려면 반드시 논리적으로 오류가 없는 조건을 입력해야 합니다. 만약 else문을 넣지 않고 if문으로 대체하여 if (size <= 16)을 넣게 되면, 16을 입력했을 때 두 개의 조건을 모두 충족하기 때문에 모든 조건의 출력문을 출력하게 됩니다.


2. switch문

switch문은 다양한 조건이 존재할 때 사용하면 소스코드를 짧게 유지할 수 있다는 장점이 있습니다. 형식은 아래와 같습니다.

switch (확인 대상) {
case 값1:
    // 값1에 부합할 때
case 값2:
    // 값2에 부합할 때
Default:
    // 모든 경우
}

다만, switch문은 특정한 케이스가 만족되면 그 아래쪽으로 쭉 수행이 된다는 특징이 있습니다. (조건에 부합하는 경우 아래쪽의 case도 모두 만족) 따라서 각각의 case를 분리하기 위해서는 case문 마지막에 break를 넣어 특정 부분만 실행할 수 있도록 합니다.
또한, switch에서 판별할 변수는 정수 자료형과 문자 자료형을 사용할 수 있습니다. 문자 자료형을 사용할 때는 case에 'a' 처럼 작은따옴표를 사용하여 문자를 지정해줍니다. 단 C언어에서는 "Hello"와 같은 문자열은 사용이 불가능합니다.

2.1. 예제1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
    printf("월(Month)을 입력하세요. ");
    int a;
    scanf("%d", &a);
    switch (a) {
    case 1:
    case 2:
    case 3:
        printf("봄입니다.\n");
        break;
    case 4:
    case 5:
    case 6:
        printf("여름입니다.\n");
        break;
    case 7:
    case 8:
    case 9:
        printf("가을입니다.\n");
        break;
    case 10:
    case 11:
    case 12:
        printf("겨울입니다.\n");
        break;
    default:
        printf("월을 제대로 입력하세요. 1부터 12사이의 숫자만 가능합니다.\n");
    }
    system("pause");
}

결과:

월(Month)을 입력하세요. 4
여름입니다.
계속하려면 아무 키나 누르십시오 . . .

2.2. 예제2

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
    printf("학점을 입력하세요. ");
    char a;
    scanf("%c", &a);
    switch (a) {
    case 'A':
        printf("A 학점입니다.\n");
        break;
    case 'B':
        printf("B 학점입니다.\n");
        break;
    case 'C':
        printf("C 학점입니다.\n");
        break;
    default:
        printf("학점을 바르게 입력하세요.\n");
    }
    system("pause");
}

결과:

학점을 입력하세요. A
A 학점입니다.
계속하려면 아무 키나 누르십시오 . . .