2018. 4. 11. 00:24ㆍ프로그래밍/C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define SIZE_4K 4096
int main(int argc, char *argv[]) {
int trim;
double num1, num2, result;
char str[SIZE_4K] = {0,};
char oper;
char *data, *data_tmp;
printf("계산할 값을 입력해주세요.(예: 1+3, 2*5 ... 종료: exit)\n");
do {
trim = 0; num1 = 0; num2 = 0; result = 0;
oper = '\0'; data = NULL; data_tmp = NULL;
printf("수식: ");
fgets(str, sizeof(str), stdin);
data_tmp = (char*)malloc(sizeof(char) * strlen(str));
strcpy(data_tmp, str);
if(!strncmp(data_tmp, "exit",4))
{
break;
}
data = (char*)malloc(sizeof(char) * strlen(str));
data_tmp = (char*)malloc(sizeof(char) * strlen(str));
strcpy(data, str);
if(strchr(data, 0x20)==NULL)
{
num1 = strtod(data, &data_tmp);
trim = data_tmp - data;
strncpy(data, data_tmp, 1);
oper = *data;
if(oper == 0x2a || oper == 0x2b || oper == 0x2d || oper == 0x2f)
{
strcpy(data, str);
data_tmp = (char*)malloc(sizeof(char) * strlen(str));
strcpy(data_tmp, data+trim+1);
num2 = strtod(data_tmp, &data);
trim = strlen(data_tmp);
data_tmp = (char*)malloc(sizeof(char) * strlen(str));
strncpy(data_tmp, data, 1);
trim = strlen(data) - 1;
if(trim == 0)
{
printf("입력받은 식은 %lf %c %lf 입니다.\n", num1, oper, num2);
if(oper == '+') {
result = num1 + num2;
} else if(oper == '-') {
result = num1 - num2;
} else if(oper == '*' || oper == 'x') {
result = num1 * num2;
} else if(oper == '/') {
if(num2 == 0) {
printf("분모에는 0 이 올 수 없습니다!\n");
continue;
} else {
result = num1 / num2;
}
}
printf("계산의 결과는 %lf 입니다.\n", result);
} else {
printf("문자가 입력되었습니다. \n");
}
} else {
printf("문자가 입력되었습니다.\n");
}
} else {
printf("공백이 포함되었습니다.\n");
}
} while(1);
return 0;
}
'프로그래밍 > C' 카테고리의 다른 글
linux getch 함수 (0) | 2019.08.06 |
---|---|
linux libpcap.h documentation (0) | 2018.04.11 |
기본형 (0) | 2018.03.18 |