while (1): study();
사칙연산 계산기 본문
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