본문 바로가기
C++/뇌를 자극하는 C++

[C++] 챕터 7-1 - 분기와 반복 : 프로그램의 흐름 조절

by Minkyu Lee 2023. 4. 25.

// 7-1, 2, 3 : 간단한 if 사용

if문 사용 기본에 대해 설명한다.

 

// 7-4 : 여러개의 else if 사용

if와 else 사이에 개수 제한 없이 사용 가능하다.

 

// 7-5, 7-6 : if와 else만으로 표현

else if의 원리에 대한 설명이다.

else if는 else와 if를 합쳐놓은 기능이다.
if와 else 사용 후, else 블록 안에 if하나 더 있는 것이다.

// 7-7 : 논리 연산자로 표현

논리 연산자를 사용하면 
else if를 대체할 수 있는 경우도 있다.

if ( ... && ...)와 같이 말이다.

 

// 7-8 : 들여쓰기

들여쓰기는 코드를 읽기 쉽게 하는 용도다.
프로그램 관점에서는 있든 없든 상관없다.

 

// 7-9, 10, 11, 12 : if와 관련된 대표적인 실수

1. if뒤에 세미콜론을 붙인 경우.
2. == 대신 = 사용하는 경우.
상수를 왼쪽에 적어서 실수를 방지하자.
=를 실수로 사용했을 경우 오류가 떠서 바로 알 수가 있다.


반면에 변수 왼쪽, 상수 오른쪽에 두면 대입이 되어버린다.

그래서 오류가 안뜨고 실수를 바로 알 수가 없다.

 

// 7-13 : switch / case 사용

#include <iostream>
using namespace std;

int main()
{
	int score = 2;
	
	switch (score)
	{
		case 0:
			cout << "case0\n";
			break;
		case 1:
			cout << "case1\n";
			break;
		case 2:
			cout << "case2\n";
			break;
		case 3:
			cout << "case3\n";
			break;
	}

	return 0;
}

/*
switch case문은 switch로 시작한다.
중괄호 안에 case를 여러개 쓸 수 있다.
모든 case는 break로 끝난다.

--- 결과 ---
case2

*/

 

// 7-14 : break 제거

#include <iostream>
using namespace std;

int main()
{
	int score = 2;
	switch (score)
	{
		case 0: 
			cout << "case0\n";
		case 1:
			cout << "case1\n";
		case 2:
			cout << "case2\n";
		case 3:
			cout << "case3\n";
	}
	return 0;
}
/*
break를 쓰지 않으면 다음 case 안의 내용도 다 실행된다.

--- 결과 ---
case2
case3
*/

 

// 7-15 : default 사용

#include <iostream>
using namespace std;

int main()
{
	int score = 5;

	switch (score)
	{
		case 0:
			cout << "case0\n";
			break;
		case 1:
			cout << "case1\n";
			break;
		case 2:
			cout << "case2\n";
			break;
		case 3:
			cout << "case3\n";
			break;
		default:
			cout << "default\n";
	}

	return 0;
}

/*
if의 else처럼 나머지 처리가 있다.
모든 case에 해당하지 않는 경우 default 키워드를 사용한다.

default는 관례상 가장 아래에 위치한다.
만약 가장 아래가 아니라면 break 넣어야한다.

--- 결과 ---
default
*/

 

// 7-16 : case 여러개 붙여 사용

#include <iostream>
using namespace std;

int main()
{
	int score = 1;

	switch (score)
	{
	case 0:
	case 1:
	case 2:
		cout << "case0\n" << "case1\n" << "case2\n";
		break;
	case 3:
		cout << "case3\n";
		break;
	default:
		cout << "default\n";
	}

	return 0;
}

/*
case는 여러개 붙여 사용 가능하다.
붙여서쓴 case에 해당하면 동일한 결과가 나온다.

--- 결과 ---
case0
case1
case2
*/

 

// 7-17 : switch / case를 if로 변경

if는 변수를 쓸 수 있다.
case는 상수만 올 수 있다.
이것이 가장 큰 차이이다.

switch / case를 사용하는 경우는,
한 변수를 두고 값에 따라 서로 다른 일을 시키고 싶을 때이다.
그 외는 if를 쓴다.

 

// 7-18, 19 : case안에 변수 정의시 문제점

/*
#include <iostream>
using namespace std;

int main()
{
	char c = 'B';

	switch (c)
	{
		case 'A' :
			char my_grade = 'A';
			break;

		case 'B' :
			break;
	}
	return 0;
}
*/

/*
case 안에서 변수 정의가 가능하다.
하지만 주의사항이 있다.

위처럼 코드 작성시 my_grade 초기화 오류가 발생한다.
빌드되지 않는다.

이유는
c의 값이 B라면 A를 건너뛰기 때문이다.
해결법은 중괄호 사용이다.
이러면 중괄호 밖에서 접근할 수 없게 되기 때문이다.
자세한 설명은 798쪽 참고.
*/

#include <iostream>
using namespace std;

int main()
{
	char c = 'B';

	switch (c)
	{
	case 'A':
		{
		char my_grade = 'A';
		break;
		}

	case 'B':
		break;
	}
	return 0;
}

/*
오류가 해결된다.
*/

 

// 7-20, 21 : 삼항 연산자

c = a > b ? a : b;

 

// 7-22 : goto의 사용

#include <iostream>
using namespace std;

int main()
{
	goto ILoveYou;
	
	cout << "출력되지 않음";
	
	ILoveYou:
		cout << "출력됨";

	return 0;
}

/*
이동시킬 곳 표시할 방법이 레이블이다.
여러개 레이블 만들기 가능하다.

goto 사용하지 말라.
실행흐름 이동이 필요하다면, 뒤에서 배우는 반복 명령으로 대체하라.

그래도 좋을 때 있다.
반복 2~3개 중첩시이다.
한번에 빠져나가는 것이 코드가 더 간결하다.
알아서 판단해라.
*/

 

댓글