while循环中的switch语句

时间:2014-04-21 07:39:30

标签: c printf scanf

当我运行此代码时,这是我的输出:

$ 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);
        }
}

感谢。

3 个答案:

答案 0 :(得分:3)

在您的情况下,您的scanf会在第二次调用中将换行符读入&amp;运算符。要跳过空白字符,请尝试使用:

scanf(" %c%f", &operator, &number);

代替。即在格式的开头放置一个空格字符。在%c%f之间放置一个空格可能是个好主意。

答案 1 :(得分:0)

在阅读第二行输入时,scanf()正在阅读\n格式规范的%c换行符。

答案 2 :(得分:0)

尝试打印运算符和数字的值,以便我们知道为什么值不执行情况&#39; +&#39;代替。