[C언어]조건문 if와 else 사용하기

ET의 공부/C언어|2019. 12. 19. 22:32

조건문인 if와 if에 else를 붙이는 방법에 대해 포스팅해보겠습니다.

 

1. if 문

 

if문은 둘 중 하나를 선택하는 특성 때문에 분기문 도는 선택 문이라고도 불립니다. 이러한 if문의 구조는

 

if(조건){
         참일때 실행;
    }
    

 

로 이루어져 있습니다. 조건이 참일 때 if문 안에 있는 코드가 실행됩니다. 이러한 구조는 while문과 유사하지만 

while문은 검사와 실행이 여러 번 반복되는 반면 if문은 한 번만 실행됩니다.

 

while문에 대한 설명은 아래 링크와 같습니다.

https://by-man.tistory.com/92

 

[C언어] 무한반복 while문

안녕하세요. 이번 포스팅은 반복문인 while문에 관한 포스팅입니다. 읽어주셔서 감사합니다. while 문은 표현식이 거짓 또는 0이 될 때까지 반복하는 루프를 수행합니다. while 문은 진입 조건 루프로서, 루프에..

by-man.tistory.com

 

if문의 표현식은 일반적으로 관계 표현식이 주로 사용됩니다.

예를 한번 들어보겠습니다.

 

#include <stdio.h>
 
 
int main (void)
{
    int num = 10;
    if(num > 5){
        printf("%d 는 5보다 큽니다\n",num);
    }
    
    return 0;
}

 

if문의 조건으로 if(num > 5) 라는 조건을 주었습니다. 

    if(num > 5){

        printf("%d 는 5보다 큽니다\n",num); }

라는 코드를 해석하자면 num이 5보다 클때 printf("%d 는 5보다 큽니다\n",num) 라는 코드를 실행하게 됩니다. 

 int num = 10 으로 num은 10이므로 5보다 큽니다. 따라서 실행 결과는 [10 는 5보다 큽니다] 라는 결과가 나오게 됩니다.

 

저는 중괄호{} 치는 것이 습관화되어 단일 문에도 중괄호{}를 쳐주었지만 단일 문의 경우 아래와 같이 중괄호를 생략할 수 있습니다.

 

#include <stdio.h>
 
 
int main (void)
{
    int num = 10;
    if(num > 5printf("%d 는 5보다 큽니다\n",num);
    return 0;
}

 

if(num > 5printf("%d 는 5보다 큽니다\n",num); 와 같이 중괄호{}를 생략하고 코드를 작성하셔도 무방합니다.

다만 if에는 세미클론(;)을 붙이지 않습니다. 세미클론을 붙이게 된다면 그 자체로 문장이 끝나기 때문에 조건에 상관없이 이후 코드가 실행되게 됩니다.

잘못된 예: if(num > 5); printf("%d 는 5보다 큽니다\n",num);

 

 

하지만 복합문의 경우 중괄호로 블록을 만들어 주셔야 합니다. 만약 중괄호{}를 치지 않고 여러 코드가 실행되게 된다면 

 

#include <stdio.h>
 
 
int main (void)
{
    int num = 3;
    if(num > 5)
        printf("%d 는 5보다 큽니다\n",num); //1
        printf("%d 는 5보다 큽니다\n",num); //2
    
    return 0;
}
 

 

num은 3이므로 if(num > 5) 의 조건은 맞지 않습니다. 따라서 아래의 코드들은 실행되지 않아야 하지만 결과는 [3 는 5보다 큽니다]라는 코드가 한번 실행됩니다. 1번 주석 코드는 조건문 안의 문장으로서 실행이 되지 않지만 2번 주석 코드는 조건에 상관없이 실행되게 됩니다.

 

올바른 코드는 아래처럼 조건문에 중괄호{} 처리를 해줍니다.

 

#include <stdio.h>
 
 
int main (void)
{
    int num = 3;
    if(num > 5){
        printf("%d 는 5보다 큽니다\n",num);
        printf("%d 는 5보다 큽니다\n",num);
    } // 복합문은 중괄호{}로 블록을 쳐주어야 한다
    
    return 0;
}
 

 

if문은 이와 같이 참일 때 코드를 실행하는 조건문입니다.

 

 

이를 블록도로 표시하면 위와 같습니다.

이제 우리는 if로 참이면 문장을 실행하고 아니면 건너뛰는 방법을 알게 되었는데 다른 문장을 선택할 수는 없을까요?

이러한 기능은 if else 문을 이용하여 구현할 수 있습니다.

 

2. if else 문

 

 

위의 블록도를 보시면 if의 구조와 약간 다른 것을 보실 수 있습니다. if의 경우 조건이 맞지 않으면 바로 다음 문장으로 넘어가는 반면
if else의 경우 else에 있는 코드가 실행이 됩니다.
 
#include <stdio.h>
 
 
int main (void)
{
    int num = 3;
    if(num > 5){
        printf("%d 는 5보다 큽니다\n",num);
    }
    elseprintf("num은 %d 입니다.\n",num);}
    printf("코드 종료");
    
    return 0;
}
 

 

  if(num > 5){

        printf("%d 는 5보다 큽니다\n",num);

    }

    elseprintf("num은 %d 입니다.\n",num);}

 

라는 코드가 있습니다. num은 3이므로  if(num > 5) 의 조건이 맞지 않습니다. 위의 if문으로만 구성되어 있다면 바로

printf("코드 종료"); 가 실행되었겠지만 if의 조건이 맞지 않을 때 else의 문장이 실행되므로

printf("num은 %d 입니다.\n",num); 라는 

코드가 실행되게 됩니다.

 

3. if 문을 여러 번 실행 else if 문

 

이제 우리는 하나의 조건이 아닌 두 가지 조건을 실행할 수 있었습니다. 그럼 조건을 더 많이 설정할 수 없을까요?

답은 바로 else if입니다. 바로 다음 예제로 넘어가도록 하겠습니다.

 

int main (void)
{
    int num = 6;
    if(num ==3 ){printf("num 는 3 입니다.\n");}
    else if(num < 5){printf("%d 는 5보다 작습니다..\n",num);}
    elseprintf("num은 %d 입니다.\n",num);}
    printf("코드 종료");
    
    return 0;
}
 

 

이제 if와 else if 그리고 else로 구성된 코드입니다.

첫 번째로 if(num ==3 )의 참 거짓을 조사한 후 else if(num < 5)로 넘어가며 if와 else 모두 거짓일 경우 else의 문장을 출력하게 됩니다.

 

 

4. else의 위치는?

 

그럼 if가 많은 복잡한 문장에서 else는 과연 언제 실행될까요? 중괄호{}로 블록을 만들어주지 않는 한 else는 가장 가까운 if와 짝을 이루게 됩니다.

 

if(조건 1) 코드 1

if(조건 2) 코드 2

else 코드 3

 

의 경우 조건 2가 참이 아닐 때 코드 3이 실행되게 됩니다.

 

하지만 중괄호로 블록이 있다면

if(조건 1){

       코드 1

       if(조건 2) 코드 2

}

else 코드 3

 

조건 1이 참이 아닐 경우 코드 3이 실행되게 됩니다.

 

댓글()