如何创建一个计算器,通过适当的除法计算多个表达式(多于两个)
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
(呃,你似乎已经在这样做了,但是有一个奇怪的约束?)。请注意 op1
与 opt1
中的拼写错误——此代码将无法编译!此外,使用 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
),请不要使用整数,而应使用 float
或 double
类型 op1
和 op2
。由于您一次只抓取一个数字,因此您的代码中没有其他内容需要更改, 除了 最后一个 printf
:
printf("%f\n" , opt1);
#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
(呃,你似乎已经在这样做了,但是有一个奇怪的约束?)。请注意 op1
与 opt1
中的拼写错误——此代码将无法编译!此外,使用 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
),请不要使用整数,而应使用 float
或 double
类型 op1
和 op2
。由于您一次只抓取一个数字,因此您的代码中没有其他内容需要更改, 除了 最后一个 printf
:
printf("%f\n" , opt1);