评估表达式,用户可以输入所需数量的数字和运算符

时间:2019-07-17 04:24:16

标签: c

这是C编程的编程项目7.12-一种现代方法。期望程序对表达式进行求值(例如1 + 2.5 * 3)并返回其结果(在这种情况下为10.5,请注意,表达式是从左到右求值的,并且没有任何运算符优先于其他任何运算符)。 / p>

这就是我尝试过的方法(例如,表达式是1 + 2.5 * 3):将1存储在a中,将+存储在ch中,将2.5存储在b中。然后让result = a,通过与b相加,相减,相除或相乘来计算“新”结果。然后继续读取表达式,将*存储在ch中,将3存储在b中。再次运行while循环,直到scanf检测到换行符。我想知道我的方法或代码出了什么问题。

#include <stdio.h>
int main(void)
{
    float a, b, result;
    char ch;
    printf("Enter an expression: ");
    scanf("%f%c%f", &a, &ch, &b);
    result = a;
    while (ch != '\n') {
        if (ch == '+')
            result += b;
        else if (ch == '-')
            result -= b;
        else if (ch == '*')
            result *= b;
        else if (ch == '/') {
            result /= b; }
        scanf("%c", &ch);
        scanf("%f", &b);
    }
    printf("Value of expression: %.2f", result);
    return 0;
}

它不返回任何内容:(

1 个答案:

答案 0 :(得分:3)

即使在输入完整的表达式后按Enter键。

let storageRef = FIRStorage.reference().child("folderName/file.jpg");
let localFile: NSURL = // get a file;

// Upload the file to the path "folderName/file.jpg"
let uploadTask = storageRef.putFile(localFile, metadata: nil)
uploadTask.observe(.progress) { snapshot in            
    print(snapshot.progress) // NSProgress object
}

由于scanf("%c", &ch); scanf("%f", &b); 的顺序,仍将等待输入浮点数。

只要按如下所示的Enter键,就立即休息。

scanf

  

我建议您使用while (ch != '\n') { if (ch == '+') result += b; else if (ch == '-') result -= b; else if (ch == '*') result *= b; else if (ch == '/') { result /= b; } scanf("%c", &ch); if (ch == '\n') break; scanf("%f", &b); } 来阅读完整的表达式,网址为   一次并随后处理表达式,您当前的代码也非常幼稚,甚至无法用于包含fgets(等的复杂表达式,您可能希望通过处理LIFO数据结构来使用LIFO数据结构倒序。