编写一个程序,作为一个简单的“打印”计算器。该程序应允许用户键入表单: number运算符的表达式。程序应识别下列运算符:+,-,*,/,S.E
以下是显示程序应如何运行的“示例运行”:
开始计算10S设置累加器到10 = 10.000000累加器2/除以2= 5.000000内容累加器55 -减去55 -50.000000 100.25 S集累加器到100.25 = 100.250000 4*乘以4= 401.000000 0 E结束程序= 401.000000计算结束。
这是我的密码
#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");
}我的代码可以很好地处理问题输入。但是,当我输入以下(和输出)时(输入与问题相同,但在“数字”和“运算符”之间没有空格):
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。谢谢您能提供的任何帮助。
发布于 2016-01-12 07:16:46
您正在读取浮点值。因此,如果scanf看到0E,它会等待更多的数字,因为它认为您输入的指数为0E5 (=0*10^5)。这就是为什么你的程序被困在这一点上。我建议用一个不同的字符结束,以避免这种含糊不清。
另一方面,如果扫描看到0,它将输出0.0作为浮动值,而'S‘作为字符,因为'S’永远不是浮点值的有效部分。
https://stackoverflow.com/questions/34737425
复制相似问题