switch ~ case
switch ~ case는 if ~ else if ~ else와 비슷한 기능을 하는 구조로 지정된 변수의 값에 따라 다른 명령을 실행할 수 있게 해줍니다.
아래의 코드를 직접 작성하고 실행해 봅시다.
#include <stdio.h> main() { char word; printf("영어 소문자를 입력하세요"); scanf("%c", &word); switch(word) { case 'a':printf("모음");break; case 'e':printf("모음");break; case 'i':printf("모음");break; case 'o':printf("모음");break; case 'u':printf("모음");break; default:printf("자음"); } }
실행결과
위 프로그램을 실행하면 a,e,i,o,u를 제외한 문자는 '자음'을 출력합니다.
- 4행과 6행에서 문자 변수 word의 값을 지정해 줍니다.
- 7행의 switch(word)는 word의 변수값에 따라 결과를 나타내겠다는 뜻입니다. 즉, word의 값에 따라 여러가지의 다른 결과를 출력하죠.
- 9~13행에서 case 다음에 오는 값이 7행의 word의 값과 같다면 해당 case의 명령이 실행되는데, 콜론( : )이후의 명령이 실행됩니다.
- braek는 switch ~ case명령을 빠져나가는 종료 명령입니다.
- default 문장을 만나면 braek는 무조건 실행됩니다.
switch ~ case의 형식
switch (조건식){
case 값 1: 조건식이 값 1일 때 실행되는 명령문; break;
case 값 2: 조건식이 값 2일 때 실행되는 명령문; break;
::
default:조건식의 값이 case 값에 없을 경우 맨마지막에 실행되는 명령문;
}
}
braek의 역활
break는 case를 처리하는 부분에서 위에서 아래로 실행하던 흐름을 멈추고 switch ~ case를 빠져나갈때 사용됩니다. 실제로 9~13행의 break명령을 제거하고 실행한 후, 모음’u’을 입력하면 아래와 같은 결과를 볼 수 있죠.
이것은 13행의 case가 실행되면서 ‘모음’이 출력되고 switch를 종료하는 명령이 없어 아래의 case 값을 비교하다가 결국엔 14행의 default까지 실행되므로 ‘자음’더 출력됩니다.
switch ~ case의 변형
case 'a': case 'e': case 'i': case 'o': case 'u':printf("모음");break; default:printf("자음");
위 코드와 같이 같은 명령을 실행할 때 위의 코드를 생략하고 마지막에만 코드를 써주어 더 간단하게 만들 수 있습니다.
if와 switch의 차이점
if ~else와 switch ~ case는 같은 조건문으로서 개념이 비슷하지만 진행방식에서 큰 차이가 있습니다.
- if문은 모든 비교 연산(조건설정)이 가능하지만 switch문은 값에 의해서만 다른 처리가 가능합니다.
- if문은 블록( { } )으로 영역을 구분하지만 switch문은 case와 break로 영역을 구분합니다.
- if문은 else문으로 switch문은 default문으로 그 외 나머지 경우를 처리합니다.
- if문은 모든 변수형을 사용할 수 있지만, switch문은 실수형을 사용할수 없습니다.
다음 토픽에서는 조건문을 이용한 문제를 풀어봅시다.