如何从键盘输入数学表达式?

Eup*_*phe 5 c c++

我有一个简单的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;
}
Run Code Online (Sandbox Code Playgroud)

我需要使它具有多种功能,因此用户可以输入任何表达式来替换pow(x,n),无论用户从键盘输入什么.如何将表达式放入程序中?

650*_*502 10

C和C++没有为您提供已实现的此功能,因为在编译时(语法分析表达式时)和运行时(评估时)之间有明确的区别.

为表达式实现解析器和编译器/求值器是一个很好的练习,但它并不是微不足道的,可能需要比此时更多的经验(考虑到你提出的问题).

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

yacc和bison是用于根据语法定义自动生成解析/评估代码的工具.我个人更喜欢手写解析器,因为你得到更好的控制(特别是在错误处理或句法和语义层面相互作用时,但那是我和我也是NIH综合症的坏情况).

像Python或Javascript这样的高级语言为您提供已实现的此功能eval.