Skip to content

12. if 조건문


1. 키워드

  • if 조건문
  • 의사 코드(Pseudo Code)


2. if 조건문으로 특정 조건일 때 코드 실행하기

  • 조건문은 특정 조건일 때 코드를 실행하는 문법이다.


의사 코드

  • 의사 코드는 실제 프로그래밍 언어가 아닌 사람의 언어로 프로그래밍 언어를 표현한 것이다.
  • 보통 특정 프로그래밍 언어를 사용하지 않고 알고리즘이나 컴퓨터 명령을 기술할 때 사용한다.


int num1 = 10;            // C 코드
정수형 변수 num1 선언, 10 할당 // 한글로 표현한 의사 코드


3. if 조건문 사용하기

  • if 조건문은 괄호 안에 조건식을 지정하여 사용한다.


if (조건식)
{
    코드
}


  • 다음 내용을 입력한 뒤 실행해 보자.


#include <stdio.h>

int main()
{
    int num1 = 10;

    if (num1 == 10) // num1이 10이면
    {
        printf("10입니다.\n"); // "10입니다."를 출력
    }

    return 0;
}


  • C에서 조건문은 if() 형식으로 사용하며 ()(괄호) 안에는 조건식이 들어간다.
  • 그리고 {}(중괄호) 안에는 조건식이 만족할 때 실행할 코드를 넣는다.


001


  • 여기서는 변수 num110을 할당한 뒤 if 조건문으로 num110과 같은지 검사했다.
  • () 안의 조건식은 num1 == 10과 같은 형식으로 지정해 주는데 ==는 두 값이 "같을 때"라는 뜻이며 수학의 =(등호)와 같다.
  • 즉, if (num1 == 10)num110과 같은지 비교한 뒤 같으면 다음에 오는 코드를 실행하라는 뜻이 된다.


4. if 조건문과 세미콜론

  • if 조건문을 사용할 때는 ;(세미콜론)을 항상 주의해야 한다.


  • 다음 내용을 입력한 뒤 실행해 보자.


#include <stdio.h>

int main()
{
    int num1 = 5;

    if (num1 == 10); // if 조건문 끝에는 세미콜론을 붙이면 안 됨
    {
        printf("10입니다.\n");
    }

    return 0;
}


  • if 조건문 끝에 ;이 붙어있다.
  • 이렇게 되면 if는 제대로 동작하지 않고, 뒤에 오는 코드가 무조건 실행되어 버린다.
  • 그래서 num1에는 5가 들어있기 때문에 "10입니다."가 출력되면 안되지만 출력이 되고 있다.


  • if 조건문 끝에 ;을 붙이면 실제로는 다음과 같은 코드가 된다.


if (num1 == 10);

printf("10입니다.\n");


  • ifprintf는 전혀 관계가 없이 떨어진 상태가 되므로 조건식이 어떻든 printf는 항상 실행된다.
  • 이런 상황에서 컴파일 에러가 발생하지 않는 이유는, C에서는 다음과 같이 코드를 {}로 감쌀 수 있기 때문이다.


{
    printf("10입니다.\n");
}


  • printf{}로 감싸도 동작은 달라지지 않지만 변수를 선언하고 사용할 때는 약간의 차이가 있다.


5. if 조건문에서 중괄호 생략하기

  • if 조건문에서 실행할 코드가 한 줄이라면 다음과 같이 {}(중괄호)를 생략할 수 있다.


#include <stdio.h>

int main()
{
    int num1 = 10;

    if (num1 == 10)
        printf("10입니다.\n"); // 실행할 코드가 한 줄이라면 중괄호 생략

    return 0;
}


  • 마찬가지로 if 조건문 끝에는 절대 ;을 붙이면 안 된다.


if (num1 == 10); // if 조건문 끝에는 세미콜론을 붙이면 안 됨
    printf("10입니다.\n");


  • if;를 붙이면 ifprintf는 관계가 없이 떨어진 상태가 된다.
  • 즉, {} 없이 한 줄로 코드를 만들면 관계가 없는 상태가 좀 더 명확하게 보일 것이다.


  • if에서 실행할 코드가 두 줄 이상일 때는 {} 생략에 주의해야 한다.


#include <stdio.h>

int main()
{
    int num1 = 5;

    if (num1 == 10)
        printf("if 조건문\n"); // if에서 중괄호를 생략하면 첫 번째 줄만 실행됨
        printf("10입니다.\n"); // 중괄호가 없으므로 if의 결과와는 관계없이 항상 실행됨

    return 0;
}


  • if로 실행할 printf가 두 개인데도 {}를 생략하면 첫 번째 printf만 실행된다.
  • 여기서는 num15가 들어있으므로 조건식이 거짓이라 "if 조건문"은 출력되지 않지만, 뒤에 오는 printfif와 관계없이 항상 실행되므로 "10입니다."가 출력된다.


  • if로 실행할 코드가 두 줄 이상이라면 반드시 {}로 묶어준다.


#include <stdio.h>

int main()
{
    int num1 = 5;

    if (num1 == 10)
    { // if로 실행할 코드가 두 줄 이상이라면 중괄호로 묶어줌
        printf("if 조건문\n");
        printf("10입니다.\n");
    }

    return 0;
}


6. if 조건문에서 실수와 문자 비교하기

  • if 조건문에서 정수가 아닌 실수나 문자도 비교할 수 있다.


#include <stdio.h>

int main()
{
    float num1 = 0.1f;
    char c1 = 'a';

    if (num1 == 0.1f) // 실수 비교
        printf("0.1입니다.\n");

    if (c1 == 'a') // 문자비교
        printf("a입니다.\n");

    if (c1 == 97) // 문자를 ASCII 코드로 비교
        printf("a입니다.\n");

    return 0;
}

// 0.1입니다.
// a입니다.
// a입니다.


  • 비교할 변수와 값, 변수와 변수는 자료형을 맞춰주어야 한다.
  • 단, 실수는 연산한 뒤 반올림 오차가 발생할 수 있으므로 반올림 오차를 감안하여 비교한다.
  • 그리고 문자 자료형은 c1 == 'a'처럼 문자로 비교하거나, c1 == 97처럼 ASCII 코드로 비교해도 된다.


7. 사용자가 입력한 값에 if 조건문 사용하기


  • 이번에는 scanf 함수를 사용하여 사용자가 입력한 값을 변수에 저장하고, if 조건문으로 값을 비교해 보자.


#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>

int main()
{
    int num1;

    scanf("%d", &num1); // 입력받은 값을 변수에 저장

    if (num1 == 10) // num1이 10이면
    {
        printf("10입니다.\n"); // "10입니다."를 출력
    }

    if (num1 == 20) // num1이 20이면
    {
        printf("20입니다.\n"); // "20입니다."를 출력
    }

    return 0;
}

// 10 (입력)
// 10입니다.


  • 입력 값이 num1에 저장되고, ifnum110인지 비교했다.
  • 여기서는 10을 입력했으므로 "10입니다."가 출력된다.

References