If 조건문 사용하기

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

if(조건식)
{
	코드
}

 

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

 

if 조건문의 기본형태

 

다음예제를 보자.

 

#include <stdio.h>
void eatLunch(void)
{
    int money=0;
    printf("돈이 있나요?(1-yes, 0-no) : ");
    scanf("%d",&money);
    if(money==1){
        printf("점심식사를 한다\n");
    }
}

void exam(void)
{
    int math, eng;
    printf("수학점수와 영어점수를 입력하세요: ");
    scanf("%d %d",&math,&eng);
    if(math>=80&&eng>=80){
        printf("갈비찜을 먹는다"); 
    }
}
int isLeafYear(int year)
{
    int result;
    result=((year%4==0)&&(year%100!=0))||(year%400==0);
    return result;
}
int main()
{
    int year;
    eatLunch();
    exam();
    printf("연도를 입력하세요: ");
    scanf("%d",&year);
    if(isLeafYear(year))  printf("%d년도는 윤년입니다.",year);
    printf("프로그램종료 .\n");
    return 0;
}

eatLunch() 함수를 살펴보면,

money변수를 0으로 지중해주고, 값을 입력받는다. 이후 if문을 활용해 money가 1이라면 '점심식사를 한다'를 그렇지 않다면 pass해주는 함수이다.

exam() 함수를 살펴보면,

math,eng변수를 선언해주고, 수학점수와 영어점수를 입력받는다. 이후 if문을 활용해 영어점수와 수학점수가 80점 이상이라면 '갈비찜을 먹는다'를, 그렇지 않다면 pass해주는 함수이다.

isLeafYear()함수를 살펴보면,

윤년을 확인하는 함수이고, result를 선언해준 후, result값이 4로 나누어떨어지고 100으로 나누어떨어지지 않으며 400으로 나누어떨어지면 윤년을 내보내준다.

이 과정을 main 함수에서 if 문을 통해 지정해주었다. 

if 조건문과 세미콜론

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

다음 예제를 확인해보자.

#include <stdio.h>
 
int main()
{
    int num1 = 5;
 
    if (num1 == 10);    // if 조건문 끝에는 세미콜론을 붙이면 안 됨
    {
        printf("10입니다.\n");
    }
 
    return 0;
}

10입니다.

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

 

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

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

if와 printf는 전혀 관계가 없이 떨어진 상태가 되므로 조건식이 어떻든 printf는 항상 실행된다. 

그런데 왜 컴파일 에러가 발생하지 않는가? C언어에서는 다음과같이 코드를 {}(중괄호)로 감쌀 수 있기 때문이다.

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

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

 

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

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

 

#include <stdio.h>
 
int main()
{
    int num1 = 10;
 
    if (num1 == 10)
        printf("10입니다.\n");    // 실행할 코드가 한 줄이라면 중괄호 생략
 
    return 0;
}

10입니다.

마찬가지로 if 조건문 끝에는 절대 세미콜론을 붙이면 안 된다.

if에 세미콜론을 붙이면 if printf는 관계가 없이 떨어진 상태가 된다. 즉, 중괄호 없이 한 줄로 코드를 만들면 관계가 없는 상태가 좀 더 명확하게 보일 것이다.

if에서 실행할 코드가 두 줄 이상일 때는 중괄호 생략에 주의하자.

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

10입니다.

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

 

if로 실행할 코드가 두 줄 이상이라면 반드시 중괄호로 묶어두자.

 

#include <stdio.h>
 
int main()
{
    int num1 = 5;
 
    if (num1 == 10)
    {   // if로 실행할 코드가 두 줄 이상이라면 중괄호로 묶어줌
        printf("if 조건문\n");
        printf("10입니다.\n");
    }
 
    return 0;
}

사용자가 입력한 값에 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 (입력)
10입니다.

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

'Computer engineering > C' 카테고리의 다른 글

반복문-While(1)  (0) 2021.05.02
If-else 조건문  (0) 2021.04.21
4. 대입 및 산술 연산자  (0) 2021.04.01
3. #define이란?  (0) 2021.04.01
2. 수의 체계 -실수  (0) 2021.03.25

+ Recent posts