2-1. 분기문(If)

Crat3 ㅣ 2023. 5. 4. 16:22

1.  If else

if ([조건]) // [조건] == true;는 생략함
	[결과];

[조건]은 불리언 뿐만 아니라 다양한 변수 혹은 상수를 넣을 수 있다.

[조건]을 만족하면 [결과]를 발동함.

	if (isDead)
		cout << "몬스터를 처치했습니다" << endl;

	if (isDead == false) // 또는 !isDead
		cout << "몬스터가 반격했습니다" << endl;

'== false' 대신 '!false'(NOT false)를 사용할 수 있다. 그러나 혼동을 줄 수 있음.

 

이 처럼 분기문을 두 개로 쓸 수 있지만,  최적화 관점에서 분기문을 하나만 쓸 수도 있다.

	if (isDead)
		cout << "몬스터를 처치했습니다" << endl;
	else
		cout << "몬스터가 반격했습니다" << endl;

 

if else문을 사용할 때, 기본적으로 if문은 하나의 조건만 판단하기 때문에, 여러 줄을 사용하고 싶다면 중괄호를 사용하여야 한다.

	if (isDead)
	{
		cout << "몬스터를 처치했습니다" << endl;
	else
		cout << "몬스터가 반격했습니다" << endl;
	}

 

2. 분기문 중첩

(1) else if

	if (isDead) // 몬스터 체력이 20이하이면 도주하도록 함
	{
		cout << "몬스터를 처치했습니다" << endl;
	else
	{
		if (hp <= 20)
			cout << "몬스터가 도주하고 있습니다" << endl;
		else
			cout << "몬스터가 반격했습니다" << endl;
	}
	}

분기문을 여러번 중첩하면 디버그 할 때 어려움을 겪을 수 있음.

따라서 if - else if - else 문을 사용하여 코드를 간단하게 만들 수 있다.

	if (isDead) // 몬스터 체력이 20이하이면 도주하도록 함
		cout << "몬스터를 처치했습니다" << endl;
	else if(hp <= 20)
		cout << "몬스터가 도주하고 있습니다" << endl;
	else
		cout << "몬스터가 반격했습니다" << endl;

 

(2) 'switch-case 문' (가위바위보)

int main()
{
	const int ROCK = 0;
	const int PAPER = 1;
	const int SCISSORS = 2;

	int input = ROCK;

	if (input == ROCK)
		cout << "바위를 냈습니다" << endl;
	else if (input == PAPER)
		cout << "보를 냈습니다" << endl;
	else if (input == SCISSORS)
		cout << "가위를 냈습니다" << endl;
	else // 0, 1, 2 이외의 숫자
		cout << "잘못 냈습니다!!" << endl;

}

else if를 중첩하는 것 보다 더 쉬운 방법이 있다.

switch (input)
	{
	case ROCK:
		cout << "바위를 냈습니다" << endl;
		break;
	case PAPER:
		cout << "보를 냈습니다" << endl;
		break;
	case SCISSORS:
		cout << "가위를 냈습니다" << endl;
		break;
	}

break를 제거하면 다음 줄을 그대로 실행해버린다.

 

	default:
		cout << "잘못 냈습니다!!" << endl;

위의 3가지 케이스가 아닌 다른 경우에는 'default'를 사용할 수 있다.

 

- 주의점

Switch-case의 input 에는 정수만 들어갈 수 있다.

 

'기초 C++ 스터디' 카테고리의 다른 글

2-4. 가위바위보  (0) 2023.05.04
2-2. 반복문(For, While)  (0) 2023.05.04
1-8. 데이터에 관한 여러가지 팁  (0) 2023.05.02
1-7. const와 메모리 구조  (0) 2023.05.02
1-6. 비트 연산과 비트 플래그  (0) 2023.05.02