명품 C++ 프로그래밍 실습문제 2장 15번
2019. 7. 30. 17:32
15. 덧셈(+), 뺼셈(-), 곱셈(*), 나눗셈(/), 나머지(%)의 정수 5칙 연산을 할 수 있는 프로그램을 작성하라. 식은 다음과 같은 형식으로 입력된다. 정수와 연산자는 하나의 빈칸으로 분리된다.
...더보기
sol1
#include <string>
#include <iostream>
using namespace std;
int cal(int, int, char*);
int main(void)
{
char str[100];
char *op;
char *context;
int num1, num2;
while (true) {
cout << "? ";
cin.getline(str, 100);
num1 = atoi(strtok_s(str, " ", &context));
op = strtok_s(NULL, " ", &context);
num2 = atoi(strtok_s(NULL, " ", &context));
cout << num1 << " " << op << " " << num2 << " = " << cal(num1, num2, op) << endl;
}
}
int cal(int a, int b,char* op) {
if (*op == '+') {
return a + b;
}
else if (*op == '-') {
return a - b;
}
else if (*op == '*') {
return a * b;
}
else if (*op == '/') {
return a / b;
}
else if (*op == '%') {
return a % b;
}
}
개인적으로 좋은 문제같진 않습니다 이걸 atoi,strtok 등등을 써가면 매우 복잡한 문제가 되고.. 그냥 공부 차원에서 한다고 생각합시다 (솔루션 1,2를 비교해보세요)
+strtok()의 기본 반환형은 char*입니다. 때문에 op가 char*가 됩니다
+연산자 op를 포인터로 받아왔기 때문에 switch문을 쓰지않고 if문을 썼습니다. switch문은 int나 한글자의 char형에서만 사용하도록 해야합니다.
(switch문은 특정 '경우(case)'에 대응하는 값이 반드시 정수형이여야 합니다. 각 경우의 대응하는 값과 switch문에 기술한 값을 비교하는 상등연산(==)을 수행하기 때문입니다. 정수형이 아닐경우 부동소수점 오차가 발생해 엉뚱한 연산을 수행할 수 있습니다.)
+ atoit 함수 설명 : https://isos.tistory.com/17
sol2
#include <iostream>
using namespace std;
int main() {
int num1, num2;
char _operator;
cout << "?";
cin >> num1 >> _operator >> num2;
switch (_operator) {
case '+':
cout << num1 << " + " << num2 << " = " << num1 + num2 << endl;
break;
case '-':
cout << num1 << " - " << num2 << " = " << num1 - num2 << endl;
break;
case '*':
cout << num1 << " * " << num2 << " = " << num1 * num2 << endl;
break;
case '/':
cout << num1 << " / " << num2 << " = " << num1 / num2 << endl;
break;
case '%':
cout << num1 << " % " << num2 << " = " << num1 % num2 << endl;
break;
}
}
'Computer Language > C++' 카테고리의 다른 글
[C++] atoi(), atol(), atof() 함수 (0) | 2019.07.30 |
---|---|
명품 C++ 프로그래밍 실습문제 2장 14번 (0) | 2019.07.30 |
명품 C++ 프로그래밍 실습문제 2장 13번 (0) | 2019.07.30 |
명품 C++ 프로그래밍 실습문제 2장 12번 (0) | 2019.07.30 |
명품 C++ 프로그래밍 실습문제 2장 11번 (0) | 2019.07.30 |