switch ~ case문
정수 조건에 따라 코드의 흐름을 나누는 문법입니다.
int Condition
switch(Condition) // 정수 조건
{
case 0:
// Condition이 0일 때 코드 실행
break;
case 1:
// Condition이 1일 때 코드 실행
break;
case 2:
// Condition이 2일 때 코드 실행
break;
default: // if문의 else와 비슷한 역할
// Condition중 위값들과 일치하는 내용이 없을 때 코드 실행
break;
}
예제) 가위바위보에 스위치문 적용하기
이전 if문에서 만든 가위바위보를 switch문을 통하여 업그레이드 해보겠습니다.
// 1은 가위, 2는 바위, 3은 보
int Player = 0; // 플레이어는 0 초기화
int Enemy = 1; // 적은 현재 가위만 낼 줄 안다.
cout << "(1) 가위 (2) 바위 (3) 보" << endl;
cin >> Player;
switch(Player)
{
case 1: // 가위
cout << "무승부!!!" << endl;
break;
case 2: // 바위
cout << "플레이어 승리!!!" << endl;
break;
case 3: // 보
cout << "플레이어 패배ㅠㅠ" << endl;
break;
default:
cout << "잘못 된 입력을 하였습니다" << endl;
break;
}
Player의 값에 따라 switch문 분기를 타는 코드를 작성하였습니다.
switch문을 작성할 때 주의 사항도 알아보겠습니다.
break문을 빼먹는 경우
1의 값인 case의 분기의 코드를 실행 후 break문이 없는 경우 2의 값인 분기의 코드까지 실행됩니다.
switch(Player)
{
case 1:
// 코드 실행
cout << "무승부!!!" << endl;
case 2:
// case가 1인 경우에도 분기 완료후 여기도 코드 실행
cout << "플레이어 승리!!!" << endl;
break;
case 3: // 보
cout << "플레이어 패배ㅠㅠ" << endl;
break;
default:
cout << "잘못 된 입력을 하였습니다" << endl;
break;
}
break문은 해당 switch문을 빠져나가기 위한 문법입니다.
case문 내부에서 변수 선언
switch(Condition)
{
case 1:
int NumA = 1; // 사용 불가능. 에러 발생.
cout << Num << endl;
break;
case 2:
{
int NumB = 2; // 사용 가능.
cout << Num << endl;
break;
}
default:
break;
}
case문 내부에서는 기본적으로 변수를 선언할 수 없습니다.
그 이유는 switch 문 내부에서 case 1인 경우 NumA는 초기화가 되지만 case 2의 NumB는 초기화를 건너뛰는 상황이 발생하기 때문입니다.
변수 선언이 필요하다면 코드 블럭 { } 으로 case문 내부를 감싼 다음 코드를 작성하시면 됩니다.
goto문
프로그래머 사이에서는 절대 사용하지 말아야할 코드로 불리는 문법입니다.
지정한 위치로 코드의 흐름을 넘길 수 있는 문법입니다.
사용하지 말라고 해서 무조건 사용하지 않는 것은 아니고 필요하다면 사용할 수도 있습니다. (조직마다 다름)
가위바위보 예제를 통하여 바로 알아보겠습니다.
예제) 가위바위보에서 goto문 사용하기
// 1은 가위, 2는 바위, 3은 보
int Player = 0; // 플레이어는 0 초기화
int Enemy = 1; // 적은 현재 가위만 낼 줄 안다.
cout << "(1) 가위 (2) 바위 (3) 보" << endl;
Replay: // 위치 기록
cin >> Player;
switch(Player)
{
case 1: // 가위
cout << "무승부!!!" << endl;
break;
case 2: // 바위
cout << "플레이어 승리!!!" << endl;
break;
case 3: // 보
cout << "플레이어 패배ㅠㅠ" << endl;
break;
default:
cout << "잘못 된 입력을 하였습니다" << endl;
goto Replay; // Replay로 기록해둔 위치로 이동합니다.
break;
}
위 코드에서 Replay: 라는 위치를 기록해두었고 Player가 잘못 된 입력을 하는 경우 goto 문을 통하여 Replay라는 위치에 현재 코드의 진행 상황을 이동시켜주는 예제입니다.
현재 배운 문법 중 게임을 반복하고 싶을 때 활용할 수 있는 문법입니다. 다른 방법으로 게임 상황을 유지할 것이지만 프로그래밍에 정답은 없다고 다양한 방법을 보여주기 위한 예제였습니다.
이전편
[밑바닥부터 시작하는 게임 개발/C++] - [밑바닥 C++] 5. 가위바위보 게임으로 알아보는 분기문(if)
다음편
'밑바닥부터 시작하는 게임 개발 > C++' 카테고리의 다른 글
[밑바닥 C++] 7. 가위바위보도 삼세판! 반복문 (0) | 2022.02.05 |
---|---|
[밑바닥 C++] 5. 가위바위보 게임으로 알아보는 분기문(if) (0) | 2021.08.16 |
[밑바닥 C++] 4. 컴퓨터 친화적인 비트 연산자 + 축약, 증감 연산자 (2) | 2021.07.17 |
[밑바닥 C++] 3. HP 등 값을 조작하는 연산자, 변하지 않는 값 상수 (0) | 2021.07.11 |
[밑바닥 C++] 2. HP 표기 등을 위한 변수 (0) | 2021.07.10 |
댓글