如何创建一个计算器,通过适当的除法计算多个表达式(多于两个)

How to create a calculator that calculates multiple expressions (more than two) with proper division

#include <stdio.h>


int main(){


char exp[100];
char op;
int  op1 = 0;
int  op2 = 0;
int  i = 0;


printf("Enter Expression:");
scanf("%s" , &exp);


while(*(exp+i) != '[=10=]'){

if(i == 0)
op1 = *(exp+i++) - '0';
op = *(exp+i++) - '0';
op2 = *(exp+i++) - '0';


switch(op){

case '+': op1 = op1 + op2;
break;

case '-': opt1 = op1 - op2;
break;

case '*': opt1 = opt1 * op2;
break;

case '/': opt1 = opt1 / opt2;
break;}

printf("%d\n" , opt1);

return (1);}}

注意:此程序划分无法正常工作。

我正在尝试创建一个计算器来计算多个表达式(最好是用户想要的):加法、减法、乘法和除法。示例:表达式 6+4*3/7-9 = 5 的值。我试图让它在严格的从左到右评估中进行计算。感谢您的帮助!

天真的从左到右的解决方案是继续递增 i(呃,你似乎已经在这样做了,但是有一个奇怪的约束?)。请注意 op1opt1 中的拼写错误——此代码将无法编译!此外,使用 exp[i] 索引单个字符。最后,不要使用 变量名 exp,因为你可能希望有一天添加 math.h

关于循环:我不明白为什么您需要在 while 循环开始时测试 if (i == 0)。 (二读:你的缩进使它不清楚,所以你可能已经有了......)一个合适的总和是

digit ( [+-*/] digit)*

while 之前,抓住你的 op1。然后,在循环内,获取下一个运算符和操作数并更新 op1。循环直到完成,打印结果。

也就是说,您的主要问题似乎是

This programs division doesn't work correctly.

确实如此——对于整数。您的示例 6+4*3/7-9 从左到右计算为

6 + 4 = 10
  * 3 = 30
  / 7 = 4
  - 9 = -5

如您所见,30/7 = 4,这是整数除法的正确结果。如果要使用小数(其中 30/7=4.285714285714),请不要使用整数,而应使用 floatdouble 类型 op1op2。由于您一次只抓取一个数字,因此您的代码中没有其他内容需要更改, 除了 最后一个 printf:

printf("%f\n" , opt1);