while (1): study();

사칙연산 계산기 본문

학습/C, C++

사칙연산 계산기

전국민실업화 2021. 12. 16. 20:37
728x90
사칙연산 수식을 입력하면 그 결과를 출력하는 프로그램을 작성합니다. 단, 수식을 입력하는 함수와 사칙연산 함수를 매크로 함수로 작성하세요.
#define _CRT_SECURE_NO_WARNINGS
#define ADD(x, y) ((x) + (y))
#define SUB(x, y) ((x) - (y))
#define MUL(x, y) ((x) * (y))
#define DIV(x, y) ((x) / (y))
#define GET(x, op, y) tmp = scanf("%d", &x);\
                      if (tmp == EOF) break;\
                      getchar();\
                      scanf("%c", &op);\
                      scanf("%d", &y);
#include <stdio.h>
#include <string.h>

int main(void)
{
	int x, y;
	int tmp;
	int res;
	char op;

	while (1)
	{
		printf("수식 입력(종료 Ctrl+Z) : ");
		
		GET(x, op, y)

		switch (op)
		{
		case '+': res = ADD(x, y); break;
		case '-': res = SUB(x, y); break;
		case '*': res = MUL(x, y); break;
		case '/': res = DIV(x, y); break;
		}

		printf("%d %c %d = %d\n", x, op, y, res);
	}

	return 0;
}

 입력받는 함수를 꾸역꾸역 매크로 함수로 집어넣다 보니 상당히 지저분해보인다. 파이썬에서도 람다함수를 최대한 기피하는 입장에선 상당히 불편하다..

 한 가지 교훈은, scanf의 반환값으로 EOF를 받을 수 있다는 점. 반복문 조건식을 어디에 걸어야하나 고민을 오래 했는데, scanf는 입력이 ctrl + z일 시 EOF(-1)를 결과로 반환한다. 이를 이용하면 간단하게 요구하는 프로그램을 작성할 수 있다.

728x90

'학습 > C, C++' 카테고리의 다른 글

[C++] call-by-address와 call-by-reference  (0) 2021.12.18
[C++]함수 오버로딩  (0) 2021.12.17
[C언어] 전처리 지시자  (0) 2021.12.16
단어 검출 프로그램  (0) 2021.12.16
성적 처리 프로그램  (0) 2021.12.14
Comments