switch문이란, 조건문의 일종인데, 여러 개의 if~else 문을 대신하여 간결하게 작성할 때 사용하는 것입니다. if~else 문이 중첩되어 있으면 가독성이 떨어지기 때문에 스위치문이 필요합니다.
그러나 switch문 다음의 괄호()에는 "i <= 0" 이런 식의 판단문이 들어갈 수는 없고, 정수형이나 문자형(char)의 숫자만 들어갈 수 있는 제약이 있습니다. double 등의 실수는 안되고 error C2450: switch expression of type 'double' is illegal 이런 에러가 납니다.
switch는 "함수"가 아니고 "키워드"입니다.
case 상수 : 실행문; break;
case 상수 : 실행문; break;
case 상수 : 실행문; break;
case 상수 : 실행문; break;
default : 실행문; break;
}
스위치문에서 주의해야 할 점은 각 case문 끝에 break; 를 꼭 붙여야 한다는 것입니다. break; 가 없으면, 그 아래쪽의 case문들까지 모두 실행되어 버립니다. break;를 만날 때까지 멈추지 않고 계속 실행됩니다.
의도적으로 break;를 생략한 경우가 아니라, 실수로 누락했을 때는 소스가 폭주하여 위험한 에러가 발생할 수 있습니다. 따라서 우선 무조건 break;를 붙여 놓고 소스의 흐름을 검토하는 것이 안전합니다.
default 라는 것은, 위의 case문들 중에서 어느 것도 해당되지 않을 때 실행할 코드입니다. 필요하지 않다면 default문이 없어도 됩니다.
switch문 사용 방법 예제 소스
소스 파일명: example.cpp
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
#include <conio.h> // getch()
#include <ctype.h> // tolower()
int main(void) {
int i = 1;
/*
i 의 값이 1일 경우에는 "자장면"이 출력
i 의 값이 2일 경우에는 break가 없기에
군만두"와 "탕수육"이 한꺼번에 같이 출력
i 의 값이 3일 경우에는 "탕수육"이 출력
i 의 값이 4일 경우에는 "짬뽕"이 출력
만약 i 의 값이 그밖의 숫자일 경우에는 "그런 음식은 없습니다."가 출력
*/
switch (i) {
case 1 : printf("자장면\n"); break;
case 2 : printf("군만두\n"); // 아래의 탕수육도 실행됨
case 3 : printf("탕수육\n"); break;
case 4 : printf("짬뽕\n"); break;
default : printf("그런 음식은 없습니다."); break;
}
// 또한 아래와 같이, 문자(char)형으로도 판단할 수 있음
// 다만 double, float 같은 실수형은 불가능
char ch = (char) getch(); // 키보드에서 문자 1개 입력 받기
// 글자를 소문자로 변환
// (대소문자 구분 없이 입력받기 위해)
ch = (char) tolower(ch);
switch (ch) {
case 'a' : printf("A를 누르셨군요\n");
break;
case 'b' : printf("B를 누르셨군요\n");
break;
case 'c' : printf("C를 누르셨군요\n");
break;
case '9' : printf("9를 누르셨군요\n");
break;
case 0x0D : printf("Enter키를 누르셨군요\n");
break;
case 0x1B : printf("Esc키를 누르셨군요\n");
break;
default : printf("그밖의 문자...\n");
break;
}
return 0;
}
'프로그램 > C언어' 카테고리의 다른 글
값에 의한 호출(call by value)과 참조에 의한 호출(call by reference)에 대한 이해 C언어 (0) | 2016.12.05 |
---|---|
[C] 스택(Stack), 힙(Heap), 데이터(Data)영역 (0) | 2016.11.29 |
C언어 포인터 기본에 대해서 배워보도록 하자. (0) | 2016.11.29 |
C언어 구조체 (0) | 2015.10.05 |
"Editplus" 와 "Visual Studio 2010" 컴파일러 연동하기 (0) | 2015.10.01 |