当我运行此代码时,这是我的输出:
$ make 6-4 && ./6-4
`6-4' is up to date.
Begin calculations
S 3
= 3.000000
+ 2
Invalid operator
= 3.000000
= 5.000000
它开始很好,'S 3'给我'= 3.000000'。比我键入“+ 2”,这给了我'无效运算符'和两个答案。这就是我想要的:
S 3
= 3.000000
+ 2
= 5.000000
我错过了什么?
#include<stdio.h>
char operator;
float number = 0;
float result = 0;
main()
{
printf("Begin calculations\n");
while (1) {
scanf("%c%f", &operator, &number);
switch(operator)
{
case '+': {
result += number;
break;
}
case '-': {
result -= number;
break;
}
case '*': {
result *= number;
break;
}
case '/': {
result /= number;
break;
}
case 'S': {
result = number;
break;
}
case 'E': {
return 0;
break;
}
default: {
printf("Invalid operator\n");
break;
}
}
printf(" = %f\n", result);
}
}
感谢。
答案 0 :(得分:3)
在您的情况下,您的scanf会在第二次调用中将换行符读入&amp;运算符。要跳过空白字符,请尝试使用:
scanf(" %c%f", &operator, &number);
代替。即在格式的开头放置一个空格字符。在%c
和%f
之间放置一个空格可能是个好主意。
答案 1 :(得分:0)
在阅读第二行输入时,scanf()
正在阅读\n
格式规范的%c
换行符。
答案 2 :(得分:0)
尝试打印运算符和数字的值,以便我们知道为什么值不执行情况&#39; +&#39;代替。