C++

8. Control Program Flow (2)

Kelvin의 게임개발 2023. 12. 21. 00:54
728x90
반응형

1. Conditional Operator (조건부 연산자)

 

조건식이 참이면 ? 뒤의 명령을 실행하고 거짓이면 : 뒤의 명령을 실행한다

 

한줄로 if-else문 처리를 할 수 있다

 

(조건식) ? 명령1 : 명령2

 

int main()
{
	int a{ 10 };
	int b{ 20 };
	
	int result{ 0 };

	result = (a > b) ? a : b; //a가 b보다 크면 a, a 가 b보다 작으면 b를 result에 할당
	result = (a < b) ? (b - a) : (a - b); //a가 b보다 작으면 b-a, a가 b보다 크면 a-b 처리

	cout << a << "is" << ((a % 2 == 0) ? "even" : "odd") << endl; //a가 2로 나눌때 나머지가 0이면 even, 아니면 odd를 출력
}

 

 

2. for Loop

 

for Loop는 특정 횟수를 반복하고 싶을 때 주로 사용한다


초기식은 반복이 시작되기 전 한 번 실행된다 (값 초기화)

 

초기식에서 선언한 변수는 for문 안에서만 사용이 가능하다

 

조건식은 매 반복마다 검사되고 참이면 명령을 실행한다 (값이 조건에 맞는지 검사 (bool값으로 결과가 나와야 함))

 

명령이 실행되고 나면 증감식이 호출되고 다시 조건을 검사한 후 참이면 명령을 실행, 거짓이면 반복문을 빠져나간다 (조건에 사용되는 값을 ++, --)

 

증감식에서 사용되는 ++ --는 전위,후위가 같은 의미이다 이때 꼭 증감연산자만 사용할 필요는 없다 ex) i += 2; 이런것도 가능하다
 
초기식, 조건식, 증감식의 개수는 ,로 늘릴 수 있다 이때 조건식을 여러개 쓰면 가장 마지막 조건식만 적용된다 (좋지 않은 방식임 사용X)
 
초기식, 조건식, 증감식을 쓸지 안쓸지는 선택이다 (전부 없어도 가능 -> 무한루프) (좋지 않은 방식임 사용X)

 

for (초기식; 조건식; 증감식)
{
	명령;
}

 

int main()
{
	for (int i = 0; i < 5; i++) //i = 0으로 초기화, i가 5보다 작은지 검사, 참이면 i를 출력하고 거짓이면 반복문을 빠져나간다, 명령 실행 후 i를 증가시킨다
	{
		cout << i << endl;
	}

	i = 100; //i는 for문의 초기식에서 선언되었기 때문에 다른곳에서 접근이 불가능함


	//배열에 for문 적용 후 모든 배열 요소에 접근 (배열의 index range를 잘 파악하고 사용해야 한다, range를 벗어난 배열의 요소에 접근하면 안됨)
	int Scores[]{ 10, 20, 30 };

	for (int i = 0; i < 3; i++)
	{
		cout << Scores[i] << endl;
	}
	
   	//vector에 for문 적용
	vector<int> Nums{ 10, 20, 30, 40, 50 };

	for (int i = 0; i < Nums.size(); i++)
	{
		cout << Nums.at(i) << endl;
	}

	for (int i = 1, j = 5; i <= 5; i++, j++) //,로 여러개 사용이 가능하다 (조건식은 마지막 조건만 적용된다) (사용하지 말 것)
	{
		cout << "test" << endl; // 1,2,3,4 총 4번이 실행된다
	}

	for (;;) //초기식, 조건식, 증감식이 전부 비었기 때문에 무한루프 (사용하지 말 것)
	{
		cout << "Endless Loop" << endl;
	}
}

 

 

3. for each Loop (Range-based for Loop)

 

foreach Loop는 C++11문법이다

 

foreach는 컨테이너의 각 요소에 쉽게 접근할 수 있고 컨테이너의 range나 index를 신경쓸 필요가 없다

 

:앞에는 컨테이너 요소의 타입과 같은 타입의 변수를 선언해준다 이는 foreach문을 돌면서 컨테이너 내부 요소가 된다, :뒤에는 컨테이너 변수 or 데이터를 넣어주면 된다

 

이때 : 앞에 변수를 선언할 때 굳이 컨테이너 요소의 타입을 찾아 작성하지 않고 auto 키워드를 사용해도 된다

 

auto는 해당 타입이 어떤 타입인지 컴파일러에게 알려달라고 요청한다

 

for (컨테이너 요소의 타입 이름 : 컨테이너)
{
	명령;
}

 

int main()
{
	int Scores[]{ 10, 20, 30, 40, 50 };

	for (int Score : Scores) //Scores컨테이너 내부 요소는 int이기 때문에 int타입의 변수를 선언 -> 이는 foreach를 돌며 Scores컨테이너 내부 요소가 된다
	{
		cout << Score << endl; //Scores내부 요소를 전부 출력한다 (선언한 Score가 Scores 컨테이너 내부 요소가 되기 때문)
	}

	vector<double> Temps{ 10, 20, 30, 40, 50 };
	
	double Result{ 0.0 };

	for (auto Temp : Temps) //auto로 컴파일러에게 어떤 타입인지 요청 -> double
	{
		Result += Temp; //foreach문으로 Temp가 vector의 요소가 되고 vector의 모든 요소를 전부 더한다
	}

	for (auto c : "Frank") //문자열도 char[]이기 때문에 foreach문 적용이 가능하다
	{
		cout << c << endl; //F,r,a,n,k가 출력된다
	}
}

 

 

4. while Loop

 

while()의 조건이 참이면 명령을 반복한다, 거짓이 되면 while문을 빠져나온다 이때 조건식은 bool값 (T,F)이어야 한다

 

조건이 계속 참이면 무한루프를 돌기 때문에 조건식에 사용되는 value를 잘 제어해야 한다

 

while (조건식)
{
	명령;
}

 

int main()
{
	int a{ 1 };

	while (a <= 10) //a가 10이하면 반복
	{
		if (a % 2 == 0) //2로 나눌때 나머지가 0이면 (짝수)
		{
			cout << "even" << endl;
		}

		a++; //무한루프에서 빠져나오기 위한 증감연산자
	}

	
	//배열에 while문 적용
	int Scores[]{ 10, 20, 30, 40, 50 };
	int i{ 0 };

	while (i < 5)
	{
		cout << Scores[i] << endl; //10 20 30 40 50이 출력된다

		i++;
	}
}

 

 

5. do while Loop

 

do while문은 조건 검사를 마지막에 하기 때문에 시작하자마자 조건이 거짓이어도 명령이 한번은 실행되는 반복문이다

 

조건 검사 전 명령을 한 번 실행하고 조건이 참이면 반복, 거짓이면 do while문을 빠져나온다

 

do
{
	명령;
} while (조건식);
int main()
{
	int Num{ 0 };

	do
	{
		cout << "Input Num More Than 5" << endl; //명령 체크 전에 한번은 무조건 실행됨
		cin >> Num;

	} while (Num < 5); //입력값이 5보다 크면 do while문 빠져나감
}

 

 

6. continue, break

 

continue와 break는 모든 반복문에서 사용이 가능하다

 

continue를 만나면 밑의 구문을 실행하지 않고 다시 반복문의 맨 위로 이동한다 (for, while에서 continue 사용시 바로 조건문을 검사하게 된다)

 

break를 만나면 그 즉시 반복문을 빠져나온다

 

너무 많이 사용한다면 코드가 이해하기 어려워진다

 

int main()
{
	vector<int> TestNumbers{ 1,2,-3,-4,5,6,7 };

	for (auto TestNumber : TestNumbers)
	{
		if (TestNumber == 5)
		{
			break; //TestNuber가 5면 반복문 빠져나옴
		}
		else if (TestNumber < 0)
		{
			continue; //TestNumber가 0보다 작으면 다시 반복문 맨 위로 올라가게 된다
		}
		else
		{
			cout << TestNumber << endl; //따라서 TestNumber가 5가 되는 순간 반복문을 빠져나오고 0보다 작은 숫자가 되면 반복문 맨 위로 올라가기 때문에 1, 2만 출력된다
		}
	}
}

 

 

7. Infinite Loop

 

무한루프란 반복문의 조건이 항상 참이어서 무한으로 반복하는걸 의미한다 (운영체제에서 무한루프가 사용)

 

무한루프를 잘못 사용하게 되면 크래시가 발생한다 따라서 반복문을 사용할 때 무한루프인지 아닌지를 잘 확인하고 사용해야 한다 (적당한 타이밍에 break를 걸거나 조건을 거짓으로 만들어야 한다)

 

int main()
{
	for (;;)
	{
		cout << "Infinite Loop" << endl;
	}

	while (true)
	{
		cout << "Infinite Loop" << endl;
	}
}

 

 

8. Nested Loop

 

반복문도 조건문과 같이 내부에 계속해서 추가해서 사용할 수 있다

 

다차원 배열,벡터에 다중 반복문을 적용하여 모든 컨테이너 요소에 접근할 수 있다

 

int main()
{
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 5; j++) 
		{
			cout << i << "and" << j << endl; //0 0, 0 1, 0 2... 0 5, 1 0, 1 1, 1 2... 1 5... 이런식으로 출력되게 된다
		}
	}

	//다차원 배열에 2중 반복문을 적용
	int Grid[5][3]{ };

	for (int Row = 0; Row < 5; Row++)
	{
		for (int Col = 0; Col < 3; Col++)
		{
			Grid[Row][Col] = 100; //2차원 배열의 모든 요소가 100으로 초기화 된다
		}
	}
}

 

 

 

728x90
반응형

'C++' 카테고리의 다른 글

10. Function (1)  (127) 2024.01.25
9. Character & String  (134) 2024.01.08
7. Control Program Flow (1)  (89) 2023.12.20
6. Operators (연산자)  (131) 2023.12.12
5. Array And Vector  (202) 2023.12.09