C++

코드의 흐름제어

레나19 2022. 3. 10. 19:50

분기문

#include <iostream>
using namespace std;

//오늘의 주제 : 분기문
// 데이터를 메모리에 할당하고 가공하는 방법에 대해 알아보자
// 가공한 데이터를 이용해서 무엇인가를 하고 싶다면?

int main()
{
	int hp = 100; // 몬스터 HP
	int damage = 100; // 플레이어 데미지

	hp -= damage; // 피격 판정
	bool isDead = (hp <= 0); // 처치 판정

	//몬스터가 죽었으면 경험치 추가
	// 어셈블리어에서 CMP JMP

	if (isDead) // (isDead == true) 이렇게 할 수도 있는데 isDead만 해준다. 1이면 true(실행됨), 0이면 false(실행안됨)
		cout << "몬스터를 처치했습니다." << endl;

	if (isDead == false) // (!isDead) 이렇게 하기도 한다. 가독성이 편한 방향으로 골라서 하면 된다. 
		cout << "몬스터가 반격했습니다." << endl;

	//위에거에 비해 if else가 메모리 낭비가 적다. 디버깅해서 어셈블리어로 해보면 알 수 있다. 
	if (isDead)
		cout << "몬스터를 처치했습니다." << endl;
	else
	{
		if (hp <= 20)
			cout << "몬스터가 도망가고 있습니다." << endl;
		else
			cout << "몬스터가 반격했습니다." << endl;

	}
	// if - else if - else if - else 

	//switch-case
	int input = 40;
	const int ROCK = 0;
	const int PAPER = 1;
	const int SCISSORS = 2;
	//switch(괄호) 괄호 안에는 정수 계열만 넣을 수 있다. input 부분
	switch (input)
	{
	case ROCK:
		cout << "바위" << endl;
		break;

	case PAPER:
		cout << "보" << endl;
		break;

	case SCISSORS:
		cout << "가위" << endl;
		break;

	default:
		cout << "제대로 내주세요" << endl;
		break;
	}
}

 

반복문

 

#include <iostream>
using namespace std;

//오늘의 주제 : 반복문
// 데이터를 메모리에 할당하고 가공하는 방법에 대해 알아보자
// 가공한 데이터를 이용해서 무엇인가를 하고 싶다면?

int main()
{
	// while - 동안에
	// if-else 굉장히 유용하다
	// 하지만 한 번만 실행하는 게 아니라, 특정 조건까지 계속 반복해야 하는 상황
	// ex) 게임을 끌 때까지 계속 게임을 실행해라.
	// ex) 목적지에 도달할때까지 계속 이동해라
	// while ( 조건 ) { 실행 } while을 깨주는 조건을 만들어줘한다!
	// do-while
	// break( 이게 있는 반복문 중괄호를 나감) , continue(밑을 스킵하고 다시 반복문 돌려줌)
	int count = 0;

	while (count < 5)
	{
		count++;
		cout << "Hello World" << endl;
	}

	for (int count = 0; count < 5; count++)
	{
		cout << "Hello World " << endl;
	}

	int round = 1;
	int hp = 100;
	int damage = 10;

	//무한 루프 : 전투 시작

	while (true)
	{
		hp -= damage;
		if (hp < 0)
			hp = 0; // 음수 체력을 0으로 보정

		// 시스템 메세지
		cout << "Round" << round << " 몬스터 체력 " << hp << endl;

		if (hp == 0)
		{
			cout << "몬스터 처치 !" << endl;
			break;

		}

		if (round == 5)
		{
			cout << "제한 라운드 종료 " << endl;
			break;
		}
		round++;
	}


	// 1-10 사이의 홀수만 출력하기
	// bool 을 이용하면 if문 이용시 깔끔하게 출력된다.

	for (int count = 1; count <= 10; count++)
	{
		bool isEven = ((count % 2) == 0);
		if (isEven)
			continue;

		cout << count << endl;
	}

}

별찍기 구구단

 

#include <iostream>
using namespace std;

int main()
{
	cout << "hello world" << endl; //endl; 한 줄을 띄는 것
	
	//1. 별찍기
	//유저들이 어떤 정수를 입력하면
	//N*N의 별을 찍었으면 좋겠어요.

	int input;
	cin >> input; // cin 입력

	for (int i = 0; i < input; i++) 
	{
		for (int j = 0; j < input; j++)
		{
			cout << "*";
		}
		cout << endl;
	}

	// 2. 별찍기
	// 줄이 N일 때 1씩 늘어나기



	for (int i = 0; i < input; i++)
	{
		for (int j = 0; j < i+1; j++)
		{
			cout << "*";
		}
		cout << endl;
	}


	// 3. 별찍기
	// N개부터 시작해서 줄마다 한개씩 줄어들게 해주세요

	// 0번째줄 = 4개
	// 1번째줄 = 3개
	// 2번째줄 = 2개
	// 3번째줄 = 1개

	for (int i = 0; i < input; i++)
	{
		for (int j = 0; j < (input - i); j++)
		{
			cout << "*";
		}
		cout << endl;
	}

	// 구구단
	// 2단부터 9단까지 구구단을 출력해주세요.

	for (int i = 2; i <= 9; i++)
	{
		for (int j = 1; j <= 9; j++)
		{
			int answer = i * j;
			cout << i << "*" << j << "=" << answer << endl;
		}
	}
}

가위바위보게임

 

#include <iostream>
using namespace std;

int main()
{
	srand(time(0)); //시드 설정

	const int ROCK = 2;
	const int PAPER = 3;
	const int SCISSORS = 1;

	int wins = 0;
	int total = 0;

	while (true)
	{
		cout << "가위(1) 바위(2) 보(3) 골라주세요" << endl;
		cout << "> ";

		if (total == 0)
		{
			cout << "현재 승률 : 없음" << endl;
		}
		else
		{
			int winPercentage = (wins*100 /total);
			cout << "현재 승률 : " << winPercentage << endl;
		}

		int computerValue = 1 + (rand() % 3); //ramd() : 0-32767
		float winRate;
		int input;
		cin >> input;

		if (input == SCISSORS)
		{
			switch (computerValue)
			{
			case SCISSORS:
				cout << "가위(님) vs 가위(컴퓨터) 비겼습니다!" << endl;
				total++;
				break;
			case ROCK:
				cout << "가위(님) vs 바위(컴퓨터) 졌습니다!" << endl;
				total++;
				break;
			case PAPER:
				cout << "가위(님) vs 보(컴퓨터) 이겼습니다!" << endl;
				total++;
				wins++;
				break;
			}
		}

		if (input == ROCK)
		{
			switch (computerValue)
			{
			case SCISSORS:
				cout << "바위(님) vs 가위(컴퓨터) 이겼습니다!" << endl;
				total++;
				wins++;
				break;
			case ROCK:
				cout << "바위(님) vs 바위(컴퓨터) 비겼습니다!" << endl;
				total++;
				break;

			case PAPER:
				cout << "바위(님) vs 보(컴퓨터) 졌습니다!" << endl;
				total++;
				break;
			}
		}

		if (input == PAPER)
		{
			switch (computerValue)
			{
			case SCISSORS:
				cout << "보(님) vs 가위(컴퓨터) 졌습니다!" << endl;
				total++;
				break;
			case ROCK:
				cout << "보(님) vs 바위(컴퓨터) 이겼습니다!" << endl;
				total++;
				wins++;
				break;

			case PAPER:
				cout << "보(님) vs 보(컴퓨터) 비겼습니다!" << endl;
				total++;
				break;
			}
		}
	}
}

열거형

 

#include <iostream>
using namespace std;

//상수인 건 알겠는데, 너무 따로 노는 느낌
// 하나의 셋트인데... 어떻게 묶어주나? enum

	const int ROCK = 2;
	const int PAPER = 3;
	const int SCISSORS = 1;

	//숫자를 지정 안하면 첫 값은 0부터 시작
	// 그 다음 값들은 이전 값 + 1
	enum ENUM_SRP
	{
		ENUM_SCISSORS = 1,
		ENUM_ROCK,
		ENUM_PAPER
	};

	//const는 함수 안에 없으면 스텍메모리에 주소가 안잡힌다. 메모리공간에 안올라감.

// #이 붙은 거 -> 전처리 지시문
// #include <iostream> 이라는 파일을 찾아서 해당내용을 통째로 복붙해주세요. 
// 빌드 단계  1) 전처리  2) 컴파일  3)링크

#define DEFINE_SCISSORS 1  //define은 코드를 바꿔치는거다.그런데 상수로는 잘 안쓴다.
#define DEFINE_TEST cout << "Hello World" << endl;

 

 

 

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

  (0) 2022.03.20
포인터  (0) 2022.03.14
함수  (0) 2022.03.10
C++ 입문 데이터 갖고 놀기  (0) 2022.03.09
Part1. 어셈블리언어 입문  (0) 2022.03.07