在c的简单的计算器与托架

时间:2014-06-07 13:20:51

标签: c calculator brackets

我试图用c支持+, - ,*和/运算符括号中的简单计算器。例如((2.1 - 5.6)*4)+(2.8+2 / 2.2)应该是-10.29 ...我试过这样但是它只适用于没有barckets。如果用户的输入包括括号,我不知道如何处理。

float calc(void)
{
    float x,y, parse;
    char c;

    int test = scanf("%f %c %f", &x,&c,&y);
    if (test == 0){ // if '(' starts equation
        parse = calc();
        }

    else{
        if (c == '-'){
            return x - y;
        }
        else if (c == '/'){
            return x / y;
        }
        else if (c == '+'){
            return x + y;
        }
        else if (c == '*'){
            return x * y;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

这里有算法: http://en.wikipedia.org/wiki/Shunting-yard_algorithm

顺便提一下,你所使用的是中缀符号。该算法似乎做的是将其转换为后缀表示法(由于您只需要一个堆栈,因此更容易计算)。

另外,只是为了好奇,旧的计算器使用后缀表示法(还有som编程语言仍然使用它)所以,要计算3 + 5,你写3 5 +

答案 1 :(得分:1)

你不能用这种简单的方法解决复杂括号的方程式。您必须遵循一些算法。其中一个用于某些计算器的是反转波兰表示法,您可以将公式转换为特定形式,然后使用堆栈开始推送和弹出以考虑优先级进行计算。

Link to Reverse Polish Notation