【问题标题】:How to create a calculator that calculates multiple expressions (more than two) with proper division如何创建一个计算器,通过适当的除法计算多个表达式(两个以上)
【发布时间】:2015-03-04 23:22:00
【问题描述】:
#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) != '\0'){

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 的值。我试图让它在严格的从左到右的评估中计算。感谢您的帮助!

【问题讨论】:

  • 您有问题吗?
  • 是的。如何输入两个以外的多个表达式?
  • 这个问题对于 Stack Overflow 来说太宽泛了。 “通过学习 C”是唯一合理的答案。事实上,您的问题可能会在相当短的时间内结束。
  • 你有它。首先在循环外设置op1= *exp - '0'i=1。然后在循环内反复读取opop2。最后,在循环结束后打印op1
  • @user3386109:是的,我也是这么想的。 OP 可能会受益于纸和铅笔并将其绘制为流程图。

标签: c arrays calculator


【解决方案1】:

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

关于循环:我不明白为什么您需要在 while 循环的开头测试 if (i == 0)。 (第二次阅读:您的缩进使其不清楚,因此您可能已经拥有它......)适当的总和是

digit ( [+-*/] digit)*

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

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

这个程序部门不能正常工作。

确实如此 -- 对于整数。您的示例 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多