[C언어]조건문 if와 else 사용하기
조건문인 if와 if에 else를 붙이는 방법에 대해 포스팅해보겠습니다.
1. if 문
if문은 둘 중 하나를 선택하는 특성 때문에 분기문 도는 선택 문이라고도 불립니다. 이러한 if문의 구조는
if(조건){
참일때 실행;
}
|
로 이루어져 있습니다. 조건이 참일 때 if문 안에 있는 코드가 실행됩니다. 이러한 구조는 while문과 유사하지만
while문은 검사와 실행이 여러 번 반복되는 반면 if문은 한 번만 실행됩니다.
while문에 대한 설명은 아래 링크와 같습니다.
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 > 5) printf("%d 는 5보다 큽니다\n",num);
return 0;
}
|
if(num > 5) printf("%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 문
#include <stdio.h>
int main (void)
{
int num = 3;
if(num > 5){
printf("%d 는 5보다 큽니다\n",num);
}
else{ printf("num은 %d 입니다.\n",num);}
printf("코드 종료");
return 0;
}
|
if(num > 5){
printf("%d 는 5보다 큽니다\n",num);
}
else{ printf("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);}
else{ printf("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이 실행되게 됩니다.
'ET의 공부 > C언어' 카테고리의 다른 글
[C언어] 두 배열을 정렬된 형태로 합치는 2가지 방법 (0) | 2020.04.05 |
---|---|
[C언어] 배열의 두 번째로 작은 요소를 찾는 3가지 방법 (0) | 2020.04.05 |
[C언어] do while 문 (0) | 2019.12.11 |
[C언어] 무한반복 while문 (0) | 2019.12.11 |
[C언어] 반복문 for문 루프, for문 콤마(,)연산 (0) | 2019.12.10 |