(1) switch
switch.
전기 스위치 할 때 그 스위치로 이해해도 될 것 같다.
사실 if가 switch를 완벽히 대체할 수는 있지만
일부 상황에서는 switch가 코드도 짧아지고
가독성이 올라가는 경우가 있기 때문에 알아두면 좋다.
(2) if를 사용했을 때
사람의 행동에 대해서 확인하는 예제이다.
지난 포스팅에 쓴 enum도 사용하였다.
#include <stdio.h>
enum Actions {
SitDown,
StandUp,
LayDown
};
int main() {
enum Actions action = StandUp;
if (action == SitDown) {
printf("앉았습니다\n");
}
else if (action == StandUp) {
printf("일어섰습니다\n");
}
else if (action == LayDown) {
printf("누웠습니다\n");
}
}
Actions라는 enum 열거형을 선언하였고
main에서 action에 따라 다른 출력값을 보이고 있다.
저기선 action이 StandUp 이므로 "일어섰습니다"가 출력된다.
이렇게 항상 같은 변수에 대해 == 연산자를 사용하여 확인할 때 switch가 유용하게 사용될 수 있다.
switch를 사용하여 같은 코드를 써보면 아래와 같다.
#include <stdio.h>
enum Actions {
SitDown,
StandUp,
LayDown
};
int main() {
enum Actions action = SitDown;
switch (action) {
case SitDown:
printf("앉았습니다\n");
break;
case StandUp:
printf("일어섰습니다\n");
break;
case LayDown:
printf("누웠습니다\n");
break;
}
}
if에 쓰는 조건처럼 괄호에 변수를 넣어주고
case 값:
break;
case 값2:
break;
case 값3:
break;
를 해주면 된다.
그러면 각 경우에 맞는 코드들이 실행될 것이다.
따라서 두 번째 코드도 똑같이 "일어섰습니다" 라고 나온다.
break;를 써주는 이유는 간단하다.
값이 일치하는 case를 만나게 되면
코드 진행(rip ?) 이 그곳으로 JUMP하게 된다.
그래서 action이 StandUp일 때 printf("일어섰습니다\n"); 부분으로 갔다가
switch가 끝나지 않고 다음 줄까지 이어져 printf("누웠습니다\n");도 실행되는 것이다.
break;를 뺀 코드를 실행한 결과를 보면 이렇다.
(3) default
가능성 있는 값이 너무 많거나 깜빡하여 case에 적어주지 못할 수 있다.
그럴 때는 case (값): 대신 default: 를 실행하게 된다.
#include <stdio.h>
enum Actions {
SitDown,
StandUp,
LayDown,
Jump
};
int main() {
enum Actions action = Jump;
switch (action) {
case SitDown:
printf("앉았습니다\n");
break;
case StandUp:
printf("일어섰습니다\n");
break;
case LayDown:
printf("누웠습니다\n");
break;
default:
printf("알 수 없는 행동입니다\n");
break;
}
}
enum Actions에 Jump를 추가하였고 action에 Jump를 대입하였더니
SitDown, StandUp, LayDown 중 하나도 일치하는 경우가 없어
"알 수 없는 행동입니다\n"이 출력된다.
(4) case에 들어가는 값은 상수여야 한다
switch를 사용할 시 주의할 점은
case 에 들어갈 값이 컴파일 타임에 결정되어야 한다.
즉, 상수여야 한다는 말이다.
변수를 집어넣게 되면 위 사진처럼 에러가 뜬다.
switch에서 비교할 값은 변수여도 된다.
끝.
'Programming > C & C++' 카테고리의 다른 글
[C/C++] Cos Pro 1급 모의고사 - 꽃피우기 풀이 (0) | 2022.01.28 |
---|---|
[C/C++] 9.5강 - for, while에서 break, continue (0) | 2022.01.17 |
[C/C++] 백준 1152번 C++ 풀이 (0) | 2021.09.01 |
[C/C++] 백준 1157번 C++ 풀이 (0) | 2021.08.30 |
[C/C++] Win32 API 첫 예제! (0) | 2021.08.24 |