미리 못 박아두지만
이 글은 switch ~ case문, while문, enum을 알아보기 위한 글이다.(클래스는 거들뿐)
클래스를 알고 싶다면 뒤로 가기를 누르고 다른 블로그를 참고하시라
1. switch ~ case문
여러 개의 상수 중 조건에 해당하는 하나를 골라 실행하는 switch ~ case 문에 대해 알아보자
일반적인 형식은
switch (조건식)
{
case 상수식 1:
실행문 1;
break;
case 상수식 2:
실행문 2;
break;
default:
실행문 3;
break;
}
이렇게 구성된다. 바로 예제코드를 확인해 보자
#include <iostream>
using namespace std;
int main(void)
{
int rank = 2, m = 0; //2등급, m 점수는 0 선언과 동시에 초기화
switch (rank) // rank의 값 확인
{
case 1: // rank 가 1이면
m = 100; // 점수는 100
break;
case 2: // rank 가 2이면
m = 90;// 점수는 90
break;
case 3:// rank 가 3이면
m = 80;// 점수는 80
break;
case 4:// rank 가 4이면
m = 70;// 점수는 70
break;
default:// rank 와 일치하는 값이 아닌 나머지
m = 60; // 점수 60
break;
}
cout << m; // 출력되는 값 90
return 0;
학생 등급에 따라 점수를 주고 싶을 때 1등급은 100점 2등급은 90점... 5등급 이하는 전부 60점으로 채점한다는 가정하에
(조건식==상수식) 참이면 해당 case의 싱행문을 실행한 후 break를 통해 switch ~case문을 빠져나온다.
아래의 그림을 참고하면 더 쉽게 이해할 수 있을 듯하다.
이처럼 case 1번의 조건 rank==1 이 맞지 않아 case 2로 넘어가 rank ==2를 충족하고
실행문을 돌리고 break를 통해 빠져나와 출력을 하게 된다.
2. while문
일정 조건을 만족할 때까지 실행문을 반복하는 while문
while (조건식)
{
실행문;
}
이렇게 구성되어 있다. 바로 예제코드를 확인해 보자
#include <iostream>
using namespace std;
int main(void)
{
int a = 1; // a를 선언과 동시에 값 1로 초기화
while (a < 10) // a가 10 보다 작을 때까지 반복문을 돌림
{
a *= 2; // a= a*2 a에 2를 곱해 다시 저장
}
cout << a; // 반복문이 종료된 후 a의 값은 16 출력됨
return 0;
}
a <10 | 1회 (참/1) | 2회 (참/1) | 3회 (참/1) | 4회 (참/1) | 5회 (거짓 / 0) |
a*=2 | 1 X 2 | 2X2 | 4X2 | 8X2 | 실행하지 않음 |
a 값 | 2 | 4 | 8 | 16 | 실행하지 않음 |
while 문이 도는 과정이다. 조건이 만족할 때까지만 돌기 때문에 4번만 돌고 16의 값을 출력하게 된다.
그럼 의문이 들 것이다. 계속 참이면 어떻게 되는가?
무한하게 반복된다. 이를 무한반복문이라 한다. 이를 다루는 방법은 나중에 나올 계좌개설 클래스를 통해 설명하겠다.
3. enum 열거형
switch ~case를 공부하다가 조금 더 가독성 있는 코드를 위한 열거형이라는 것을 찾았다!
앞에서 우리는 case 가 1일 때 또는 2일 때 이렇게 만든 것을 기억하는가? 옆에 하나씩 주석을 달면 1이 뭐고 2가 무엇인지 알 수 있으나 코드로 직관적으로 알 수 있게끔 만드는 열거형을 사용해 보자 아래의 예시코드를 확인해 보자
#include <iostream>
using namespace std;
enum animal {LION, DOG, CAT, RAT};// 열거형 선언 앞에서 부터 0,1,2,3
int main(void)
{
int a, b;
cin >> a; // a값 입력받기
switch (a)
{
case LION: // 사자면 b는 5
b = 5;
break;
case DOG: // 개면 4
b = 4;
break;
case CAT: // 고양이는 3
b = 3;
break;
case RAT: // 쥐는 2
b = 2;
break;
}
cout << b; //b값 출력
return 0;
}
case다음엔 상수식이 오는 거 아닌가요?라고 묻는다면 맞다 저기에 있는 LION, DOG, CAT, RAT은 각각 0,1,2,3을 뜻한다.
열거형은 변수에 저장할 수 있는 정수 값을 기호로 정의해서 나열한다.
enum 열거형 이름 {기호, 기호, 기호}
이렇게 선언을 한다. 컴파일러는 멤버를 0부터 1씩 증가해 큰 정수로 바꾼다.
위의 예시처럼 아무런 값을 설정하지 않으면 자동은 0, 1, 2, 3... 이런 식으로 설정해줌
만약 enum animal {LION = 2, DOG, CAT, RAT =8} 이렇게 저장한다면
LION =2, DOG =3, CAT =4 RAT=8의 값으로 설정된다.
이걸 사용하니 switch ~ case문이 좀 더 직관적으로 변하지 않았는가!!! 맘에 든다.
4. 계좌 개설 클래스
이 밑의 어마무시하게 긴 코드는 그냥 눈으로 읽어보면서 오늘 배운 switch ~case문, while문, enum열거형이 어떻게 쓰였는지 확인만 하는 코너이다.
주요 포인트
1. enum { MAKE = 1, DEPOSIT, WITHDRAW, INQUIRE , EXIT };
MAKE부터 1, 2, 3, 4, 5를 설정했다.
2. while (1)
무한반복문인 while(1) 조건식이 항상 참(1)이라 프로그램 종료될 때까지 반복한다.
3. switch ~ case 문에 열거형으로 만든 기호를 넣어 가독성을 높였다.
전부 이해하지 않아도 된다. 아 그렇게 썼구나~ 정도만 이해가능하면 오케
//계좌 개설 프로그램
#include <iostream>
#include <cstring>
using namespace std;
void ShowMenu(void); //메뉴출력 함수
void MakeAccount(void); //계좌생성 함수
void DepositMoney(void); //입 금 함수
void WithdrawMoney(void); //출 금 함수
void ShowAllAccInfo(void); //잔액조회 함수
enum { MAKE = 1, DEPOSIT, WITHDRAW, INQUIRE , EXIT };
class Bank
{
public:
int accID; //계좌번호
int balance; //잔액
string cusName;// 고객이름
};
Bank accArr[100];
int accNum = 0;
int main(void)
{
int choce;
while (1) //항상 돌아감
{
ShowMenu();
cout << "선택: ";
cin >> choce;
cout << endl;
switch (choce) // switch case 문
{
case MAKE:
MakeAccount();
break;
case DEPOSIT:
DepositMoney();
break;
case WITHDRAW:
WithdrawMoney();
break;
case INQUIRE:
ShowAllAccInfo();
break;
case EXIT:
cout << "[프로그램 종료]" << endl;
return 0;
break;
default:
cout << "illegal selection.." << endl;
}
}
return 0;
}
void ShowMenu(void)
{
cout << "----- Menu-----" << endl << "1. 계좌개설 " << endl << "2. 입금" << endl <<
"3. 출금" << endl << "4. 계좌정보 전체 출력" << endl << "5. 프로그램 종료" << endl;
}
void MakeAccount(void)
{
int id;
string name;
int balance;
cout << "[계좌 개설]" << endl;
cout << "계좌 ID: "; cin >> id;
cout << "이름: "; cin >> name;
cout << "입금액: "; cin >> balance;
accArr[accNum].accID = id;
accArr[accNum].balance = balance;
accArr[accNum].cusName = name;
accNum++;
}
void DepositMoney(void)
{
int id;
int money;
cout << "[입 금]" << endl;
cout << "계좌ID :" << endl; cin >>id;
cout << "입금 금액 :"; cin >> money;
for (int i = 0; i < accNum; i++)
{
if (accArr[i].accID == id)
{
accArr[i].balance +=money;
cout << "입금완료" << endl;
return;
}
}
cout << "유효하지 않은 ID입니다." << endl;
}
void WithdrawMoney(void)
{
int id;
int money;
cout << "[출 금]" << endl;
cout << "계좌ID :" << endl; cin >> id;
cout << "출금 금액 :"; cin >> money;
for (int i = 0; i < accNum; i++)
{
if (accArr[i].accID == id)
{
if (accArr[i].balance < money)
{
cout << "잔액부족" << endl;
return;
}
accArr[i].balance -= money;
cout << "출금완료" << endl;
return;
}
}
cout << "유효하지 않은 ID입니다." << endl;
}
void ShowAllAccInfo(void)
{
cout << "[계좌정보 전체 출력]" << endl;
for (int i = 0; i < accNum; i++)
{
cout << "계좌ID : " << accArr[i].accID << endl;
cout << "이 름 : " << accArr[i].cusName << endl;
cout << "잔 액 : " << accArr[i].balance << endl;
}
}
'Unreal > C++' 카테고리의 다른 글
[C++ 01.17] 배열과 오름차순, 선택 정렬 sort() 함수, (0) | 2025.01.17 |
---|---|
[C++ 01.09] if문과 max()함수 (0) | 2025.01.09 |
[C++ 01.02] 표준입출력, 헤더파일, 네임스페이스, 범위지정 연산자 (0) | 2025.01.02 |