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

 

[C++] atoi(), atol(), atof() 함수

int atoi(const char *string) 정수 문자열을 실제 정수로 변환하는 함수 인자(string) : 변환할 문자열이 저장된 메모리 주소 반환값 : 변환된 int 값, 변환에 실패할 경우 0을 반환 long atol(const char *stri..

isos.tistory.com

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;
	}

}

BELATED ARTICLES

more