【发布时间】:2014-06-07 13:20:50
【问题描述】:
我尝试用 c 语言制作简单的计算器,支持带括号的 +、-、* 和 / 运算符。例如((2.1 - 5.6)*4)+(2.8+2 / 2.2) 应该是-10.29...我试过这样但它只适用于没有括号。如果用户的输入包含括号,我不知道如何处理。
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;
}
}
}
【问题讨论】:
-
你必须把它分解成两个问题:1)找到所有的括号,将它们配对,找到它们最里面的内容; 2) 评估这些内容。它变成了一个递归代码——详细解释这一点的范围超出了 StackOverflow 的范围。
-
您没有按正确的优先级进行数学运算。通过Shunting-yard算法将其转换为RPN并计算
标签: c calculator brackets