【发布时间】:2014-02-20 16:42:18
【问题描述】:
我正在尝试创建一个计算器来解决不同长度的算术表达式(例如 2+3/4 或 7*8/2+12-14),我想知道如果没有字符串的使用。
我找到了无数教程来解释如何制作一个只有两个数字和一个运算符的简单计算器,我还找到了使用 sscanf 和字符串获取输入的示例。
但是,我的问题是:有没有办法(甚至可能)在不使用字符串的情况下获得可变长度输入?
起初我以为我可以简单地添加更多说明符:
int num1 , num2, num3;
char op1, op2;
printf("Please enter your equation to evaluate: ");
scanf("%d%c%d%c%d", &num1, &op1, &num2, &op2, &num3);
但显然,这不适用于长于 3 个数字或少于 3 个数字的方程式。 我也在考虑使用某种递归函数,但我不确定如果我需要预先询问整个方程,我会怎么做?
【问题讨论】:
-
你可以尝试自己做解析器并使用en.wikipedia.org/wiki/Reverse_Polish_notation
-
一次读取一个字符。
-
当然,不使用字符串,您可以将每个标记存储为
char,但是 - 您需要一个下降解析器。最好将表达式转换为波兰符号,然后构建具有堆栈结构的表达式树。 -
有没有什么方法可以不使用编译器来编译程序?
-
如前所述,您需要将输入字符串(方程)解析成某种形式,例如RPN。具体说明方程遵循什么样的规则:简单的从左到右或代数(在加减之前乘除)。是否允许使用括号?
+ - * /以外的其他运算符?如果您的操作数只是数字,您可能可以在很大程度上动态评估它们(尽管使用代数(基于堆栈)表示法,并非所有都可以立即评估)。最后,不要吝啬错误检测、报告甚至修复——还有更多错误的输入方式!
标签: c calculator