포인터 계산기

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