如何用键盘输入数学表达式

How to input a mathematical expression from keyboard?

本文关键字:表达式 输入 何用 键盘      更新时间:2023-10-16

我有一个简单的C程序

int main()
{
int n, maxn = 21;
float SN, x;
printf("input x:");
scanf("%f", &x);
printf("input maxn:");
scanf("%d", &maxn);
for(n=0;n<=maxn;n++){
SN = SN + pow(x,n);
n = n + 1;
}
printf("%f", SN);
getch();
return 0;
}

我需要使它通用,这样用户就可以输入任何表达式来用用户从键盘输入的任何内容替换pow(x,n)。如何将表达式放入程序中?

C和C++没有为您提供已经实现的此功能,因为编译时(对表达式进行语法分析时)和运行时(对它们进行求值时)之间存在明显的差距。

为表达式实现解析器和编译器/计算器是一项很好的练习,但这并非微不足道,可能需要比目前更多的经验(考虑到您提出的问题)。

在我看来,解决这个问题最容易理解的方法是递归下降语法分析器,但对于四个操作、数字和变量,我想它需要大约一百行代码。

yacc和bison是用于根据语法定义自动生成解析/评估代码的工具。我个人更喜欢手工编写解析器,因为你可以得到更好的控制(尤其是在错误处理或句法和语义层面的交互时,但这就是我,我也是NIH综合征的严重患者)。

相反,像Python或Javascript这样的高级语言为您提供了这个已经实现为eval的功能。