4-1-다.else

다음은 if문을 한 단계 더 확장해 보자.

 

if (조건) 명령1; else 명령2;

 

기본 if문은 조건이 만족할 때 특정 명령을 실행할 것인가 아닌가만 지정하는데 비해 else 문은 조건이 만족되지 않을 때의 동작까지도 같이 지정한다. else는 말 그대로 "그 외에"라는 뜻이며 조건이 만족되지 않을 때 실행할 명령을 지정한다. else가 있는 if문은 괄호안의 조건을 평가해 보고 이 조건이 참이면 명령1을 실행하고 거짓이면 명령2를 실행한다. 앞에서 만들었던 예제를 수정하여 입력받은 수가 7이 아니면 "7이 아닙니다."를 출력하도록 해 보자.

 

: if3

#include <Turboc.h>

 

void main()

{

     int i;

 

     printf("정수를 입력하세요 : ");

     scanf("%d",&i);

     if (i == 7)

          printf("7을 입력했습니다.\n");

     else

          printf("7이 아닙니다.\n");

}

 

예제를 실행해 보고 7, 6, 8을 각각 입력해 보자. else가 없는 if문은 조건에 따라 뒤따라오는 명령의 실행 여부만 결정하지만 else가 있는 if문은 조건에 따라 어떤 명령을 실행할 것인가를 선택한다. 이 예제의 순서도는 다음과 같다.

(i == 7) 조건에 따라 둘 중 하나의 명령이 선택된다. else는 if와 짝을 이루는 키워드이기 때문에 if문 없이 단독으로 쓸 수는 없다. else만 혼자 쓰는 어처구니 없는 실수를 하지는 않겠지만 블록 구조에 익숙하지 않으면 다음과 같은 실수를 할 가능성은 있다.

 

     if (i == 7)

          printf("7을 입력했습니다.\n");

          printf("행운의 7입니다.\n");

     else

          printf("7이 아닙니다.\n");

          printf("좀 잘 해 보세요.\n");

 

이렇게 되면 if문이 첫 번째 printf문에서 끝이 나 버렸기 때문에 else에 대응되는 if가 없다. 그래서 이 else는 에러로 처리된다. 제대로 수정하려면 조건 다음의 두 명령과 else 다음의 두 명령을 모두 { }로 감싸서 복문으로 만들어야 한다.

 

     if (i == 7) {

          printf("7을 입력했습니다.\n");

          printf("행운의 7입니다.\n");

     } else {

          printf("7이 아닙니다.\n");

          printf("좀 잘 해 보세요.\n");

     }

 

그래서 이런 실수를 방지하기 위해 애초에 if문을 작성할 때 { } 괄호를 붙이라고 권유하는 것이다. if else 문을 한 번 더 확장하면 if else if가 된다. 형식은 다음과 같다.

 

if (조건1) 명령1; else if (조건2) 명령2; else 명령3;

 

이 형식은 여러 개의 조건에 대해 만족하는 명령 하나를 선택할 때 사용한다. 예를 들어 7이면 7, 8이면 8, 그외의 경우는 7도 8도 아니라는 메시지를 출력하도록 하고 싶다면 다음과 같이 한다.

 

: if4

#include <Turboc.h>

 

void main()

{

     int i;

 

     printf("정수를 입력하세요 : ");

     scanf("%d",&i);

     if (i == 7)

          printf("7을 입력했습니다.\n");

     else if (i == 8)

          printf("8을 입력했습니다.\n");

     else

          printf("7도 아니고 8도 아닙니다.\n");

}

 

i가 7이면 "7을 입력했습니다"라는 문자열을 출력하고 종료한다. 만약 7이 아니면 다음 조건인 (i == 8)을 점검해 보고 이 점검 결과에 따라 적절한 메시지를 출력한다. 형식이 조금 복잡해 보일지 모르겠지만 상식적으로 쉽게 이해가 될 것이다. 순서도를 그려보면 다음과 같다.

참고로 if else if는 별다른 특별한 문법이 아니라 if else 형식의 응용이라고 할 수 있다. if else if의 기본 형식을 다음과 같이 써 보자.

 

if (조건1) 명령1; else { if (조건2) 명령2; else 명령3 };

 

else문에 걸리는 명령이 또 다른 if문일 뿐이다. 이런 식으로 if else if else if를 계속 이어서 사용하면 다수의 조건들 중 하나를 선택할 수도 있다.

 

if (조건1) 명령1;

else if (조건2) 명령2;

else if (조건3) 명령3;

else if (조건4) 명령4;

....

 

이렇게 쓸 수는 있지만 소스를 읽기가 어려워지기 때문에 이런 경우는 다음에 배울 다중 선택문 switch case를 사용하는 것이 더 좋다.