这是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;
}
它不返回任何内容:(
答案 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数据结构倒序。