编写一个程序,作为一个简单的"打印"计算器。该程序应允许用户键入以下形式的表达式:数字运算符。程序应识别以下运算符:+, - ,*,/,S。E
- S运算符告诉程序设置"累加器"输入数字。
- E运算符告诉程序执行将结束。对累加器的内容执行算术运算,其中键入的数字用作第二个操作数。
以下是"样本运行"显示该计划应如何运作:
Begin Calculations 10 S Set Accumulator to 10 = 10.000000 Contents of Accumulator 2 / Divide by 2 = 5.000000 Contents of Accumulator 55 - Subtract 55 -50.000000 100.25 S Set Accumulator to 100.25 = 100.250000 4 * Multiply by 4 = 401.000000 0 E End of program = 401.000000 End of Calculations.
这是我的代码
#include <stdio.h>
int main(void)
{
char op;
float acc = 0, num;
printf("Begin Calculations\n");
while (op != 'E') {
scanf("%f %c", &num, &op);
switch (op) {
case '+':
acc += num;
printf("= %f\n", acc);
break;
case '-':
acc -= num;
printf("= %f\n", acc);
break;
case '*':
acc *= num;
printf("= %f\n", acc);
break;
case '/':
if (num == 0) {
printf("Division by zero\n");
}
else {
acc /= num;
printf("= %f\n", acc);
}
break;
case 'S':
acc = num;
printf("= %f\n", acc);
break;
case 'E':
printf("= %f\n", acc);
break;
default:
printf("Unknown operator\n");
break;
}
}
printf("End of Calculations");
}
我的代码与问题输入完美配合。但是,当我输入以下内容(和输出)时(输入与问题相同但在&#34之间没有空格;数字&#34;和&#34;运算符&#34;):
Begin Calculations
10S
= 10.000000
2/
= 5.000000
55-
-50.000000
100.25S
= 100.250000
4*
= 401.000000
0E
输入0E时程序停滞不前。我试图将scanf("%f %c", &num, &op);
更改为scanf("%f%c", &num, &op);
,但它似乎无法解决我的问题。你能在我的代码中指出问题吗?请给我一个详细的解释,因为我是C的相对新人。提前感谢您提供任何帮助。
答案 0 :(得分:2)
您正在读取浮点值。因此,如果scanf看到0E,它会等待更多的数字,因为它认为你正在输入指数,例如0E5(= 0 * 10 ^ 5)。这就是为什么你的程序在这一点上陷入困境的原因。我建议使用不同的字符来避免这种歧义。
另一方面,如果scanf看到0S,它将输出0.0作为浮点值,输出'S'作为字符,因为'S'永远不是浮点值的有效部分。