본문 바로가기
C++

5-1. C++ switch-case, do-while

by kwon5346 2024. 2. 3.
반응형

switch-case

특별한 경우에 if문보다 깔끔하고 간결하게 코딩을 할수있다.

#include <iostream>

using namespace std;

enum class Colors
{
   RED,   // 0
   GREEN, // 1
   BLUE,  // 2
};

void printColor(Colors Color)
{
   switch(static_cast<int>(Color)) // cast를 통해 case를 정수로 
   {
      case 0 :
      cout << "RED" << endl;
      break;
      case 1 : 
      cout << "GREEN" << endl;
      break;
      case 2 :
      cout << "BLUE" << endl;
      break;
   }
}

int main()
{
   printColor(Colors::RED);   
   printColor(Colors::GREEN);
   printColor(Colors::BLUE);

   int x;
   cin >> x;
   switch(x)
   {
      case 1 :
      cout << "input is 1" << endl;
      break;
      case 2 :
      cout << "input is 2" << endl;
      break;

      default :
      cout << "undefined input" << endl;
   }

   return 0;
}

switch-case문에서 break를 쓰지 않는 경우, 걸리는 case부터 맨 아래 case까지 모두 실행된다.
하지만 의도적으로 break를 사용하지 않고 모두 실행되게 코딩하는 경우도 있다고 한다.
정의된 case가 아니라면 default가 실행된다. default밑에는 break를 넣지 않아도 된다.

switch(static_cast<int>(Color))

케이스를 정수형으로 받기위해 int형으로 형변환을 해주면 코딩이 편해진다.


do-while

while문은 조건에 따라서 한번도 실행이 안될 수 있는 반면 do-while문은 처음 1번은 무조건 실행한다.
경우에 따라서는 do-while문이 꼭 필요한 경우도 있고,
반드시 한번 해야 된다는걸 강조하기 위해서 사용할 수도 있다.

#include <iostream>

using namespace std;

int main()
{
   int selection; // 꼭 do-while 밖에 선언해야한다

   do
   {
      cout << "1. add" << endl;
      cout << "2. sub" << endl;
      cout << "3. mult" << endl;
      cout << "4. div" << endl;
      cin >> selection;
   } while (selection <= 0 || selection >= 5);

   cout << "your selection is " << selection << endl;

   return 0;
}

selection을 do 안으로 넣게되면 do 블럭이 끝나면서 selection이 사라져서
while문이 조건에 접근을 못하게 된다.

반응형