switch 문
프로그램에서 많은 조건이 존재할 경우에는 여러 개의 if문을 이용해야 하므로 프로그램이 복잡해져서 이해하기 어렵게 된다. 이러한 경우에 사용하는 문장이 switch문이 있다. switch문은 다음과 같다.
[구문 : switch문]
switch (식) {
case 값1;
문장1; // 식의 평가가 값 1인 경우에 처리된다.
...
break;
case 값2;
문장2; // 식의 평가가 값 2인 경우에 처리된다.
...
break;
default
문장n; // 식의 평가가 어느 경우도 아닌 경우에 처리된다.
...
break;
}
switch문에서는 switch문 내의 값이 case 뒤의 값과 일치하면, 그 뒤의 문장에서 [break]까지의 문장을 실행한다. 만약 어디에도 일치하지 않으면 [default : ] 이하의 문장을 실행한다. [default : ]는 생략할 수도 있다. switch문을 사용하면, if~ else if~else를 간단하게 기술할 경우가 있다.
예제) switch ~ case문의 사용
두 수와 연산자를 키보드로부터 입력한 후 연산자가 +이면 덧셈을 수행하고, -이면 뺄셈, *이면 곱셈, /이면 나눗셈을 수행하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
double num1, num2, result;
char oper;
cout << "두 개의 정수를 입력하세요=> ";
cin >> num1 >> num2;
cout << "사칙연산자(+, -, *, /)중 하나를 입력하세요=> ";
cin >> oper;
switch (oper) { //이 코드는 변수 oper의 값을 판단한다.
case '+': result = num1 + num2;
cout << "덧셈을 수행했습니다.\n";
break;
case '-': result = num1 - num2;
cout << "뺄셈을 수행했습니다.\n";
break;
case '*': result = num1 * num2;
cout << "곱셈을 수행했습니다.\n";
break;
case '/': result = num1 / num2;
cout << "나눗셈을 수행했습니다.\n";
break;
default :
cout << "연산자가 잘못 입력되었습니다.\n";
}
cout << num1 << oper << num2 << "=" << result << '\n';
return 0;
}
break문이 생략되어 있다면?
아래의 코드를 살펴보도록 한다.
#include <iostream>
using namespace std;
int main()
{
double num1, num2, result;
char oper;
cout << "두 개의 정수를 입력하세요=> ";
cin >> num1 >> num2;
cout << "사칙연산자(+, -, *, /)중 하나를 입력하세요=> ";
cin >> oper;
switch (oper) { //이 코드는 변수 oper의 값을 판단한다.
case '+': result = num1 + num2;
cout << "덧셈을 수행했습니다.\n";
case '-': result = num1 - num2;
cout << "뺄셈을 수행했습니다.\n";
case '*': result = num1 * num2;
cout << "곱셈을 수행했습니다.\n";
case '/': result = num1 / num2;
cout << "나눗셈을 수행했습니다.\n";
default :
cout << "연산자가 잘못 입력되었습니다.\n";
}
cout << num1 << oper << num2 << "=" << result << '\n';
return 0;
}
이 코드에서는 oper의 값으로 '+'를 입력했을 때에 case1 : 이후의 문장이 모두 실행되어 버린다. 따라서 항상 result의 결과는 나눗셈을 한 결과를 나타낸다.
break문은 문장의 흐름을 강제적으로 중단시키는 역할을 한다. switch문에서는 break문이 나오던지, 블록이 종료할 때까지 블록 내의 문장이 차례대로 처리되기 때문에, 올바른 위치에 break문을 넣지 않으면 이상한 결과로 되어 버린다.
break문을 쓰는 것을 잊어버리거나 위치를 잘못 써도 컴파일러는 오류를 표시하지 않기 때문에 주의해야 한다. break문에 관해서는 반복문에서 다시 학습하기로 한다.
논리 연산자
복잡한 조건을 C++에서 기술할 경우에는 논리 연산자(logical operator)라는 연산자를 사용할 수 있다. 논리 연산자는 조건을 거듭 평가해서, true 또는 false의 값을 얻는 역할을 한다.
성적이 [우수]하고 동시에, 돈이 있다면...
→해외 여행을 간다.
예를 들면, 위의 조건을 논리 연산자를 사용해서 기술하면 다음과 같다.
(성적이 [우수]하다) && (돈이 있다)
&& 연산자는 왼쪽과 오른쪽이 모두 true인 경우에 전체의 값을 true로 하는 논리 연산자이다. 이 경우는 [성적이 우수하고] 동시에 [돈이 있는] 경우에 이 조건은 true로 된다. 어느 쪽인가 한쪽이라도 성립하지 않는 경우는 전체의 조건은 false로 되고 성립하지 않는 것으로 된다.
논리 연산자
출처: https://medium.com/free-code-camp/a-definitive-guide-to-conditional-logic-in-javascript-23fa234d2ca3
예제) 논리 연산자
논리 연산자(||)를 사용하여 키보드로부터 입력한 한 문자가 Y(y)이면 "당신은 남성이군요.", N(n)이면 "당신은 여성이군요."를 출력하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
char res;
cout << "당신은 남성입니까?\n";
cout << "Y 또는 N을 입력하세요=> ";
cin >> res;
if (res == 'Y' || res == 'y') { //Y 또는 y가 입력된 경우에 처리된다.
cout << "당신은 남성이군요.\n";
}
else if (res == 'N' || res == 'n') {
cout << "당신은 여성이군요.\n";
}
else {
cout << "Y 또는 N을 입력하세요.\n";
}
return 0;
}
키보드로부터 입력한 문자에 따라서 처리를 수행하고 있다. 문자에는 Y와 y와 같이 대문자와 소문자가 있는데, 여기서는 대문자, 소문자의 구별 없이 처리할 경우를 고려하였다.
||을 사용해서 if문을 기술하면 Y 또는 y를 입력했을 때에 같은 처리를 수행할 수 있다.
조건 연산자
간단한 조건 판단인 경우는 if문을 사용하지 않고도 조건 연산자(conditional operator)의 [? : ]를 사용해서 쓸 수도 있다.
[구문 : 조건 연산자]
조건 ? true일 때의 식1 : false일 때의 식2
조건 연산자는 3개의 오퍼랜드를 취하는 연산자이다. 전체 식의 값은 조건이 true일 때 식1의 값, false일 경우에는 식1의 값으로 된다.
ans = (res == 1) ? 'A' : 'B'
true일 때 → 'A'
false일 때 → 'B'
다음과 같은 코드를 살펴보도록 한다.
#include <iostream>
using namespace std;
int main()
{
int res;
char ans;
cout << "몇번째의 코스로 합니까?\n";
cout << "정수를 입력하세요=> ";
cin >> res;
if (res == 1)
ans = 'A';
else
ans = 'B';
cout << ans << "코스를 선택하였다.\n";
return 0;
}
이 코드는 res == 1이 true일 때 변수 ans에 문자 A를 대입하고, 그 이외의 경우는 B를 대입하는 처리를 if문을 사용해서 기술한 것이다. 이와 같은 간단한 조건 판단은 조건 연산자 ? : 를 사용해서 다음과 같이 바꿔 쓸 수 있다.
예제) 조건 연산자
정수를 키보드로부터 입력하여 1이면 "A코스를 선택하였다", 그 이외의 값이면 "B코스를 선택하였다"를 출력하는 코드를 작성해 보도록 한다. 단, 조건 연산자를 사용하시오.
#include <iostream>
using namespace std;
int main()
{
int res;
char ans;
cout << "몇번째의 코스로 합니까?\n";
cout << "정수를 입력하세요=> ";
cin >> res;
ans = (res == 1) ? 'A' : 'B';
cout << ans << "코스를 선택하였다.\n";
return 0;
}
if문보다도 간단히 기술할 수 있다는 것을 알 수 있다.
출처: 박흥복, 서정희. 2015. C++ 프로그래밍 (초보자를 위한). 문운당
'개발 > C++' 카테고리의 다른 글
C++ 반복문2 (0) | 2022.03.16 |
---|---|
C++ 반복문 (0) | 2022.03.11 |
C++ 제어문 (0) | 2022.03.08 |
C++ 식과 연산자2 (0) | 2022.03.06 |
C++ 식과 연산자 (0) | 2022.02.25 |