【问题标题】:switch statement in while loop [duplicate]while循环中的switch语句[重复]
【发布时间】:2014-04-21 07:39:30
【问题描述】:

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

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

谢谢。

【问题讨论】:

标签: c printf scanf


【解决方案1】:

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

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

相反。 IE。在格式的开头放置一个空格字符。在%c%f 之间也放置一个空格可能是个好主意。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      尝试打印 operator 和 number 的值,以便我们了解为什么该值不执行 case '+'。

      【讨论】:

      • @chouaib:我想提供帮助,但无法添加评论。非常遗憾。我应该删除它吗?
      • 我认为它也应该更好地用作评论。抱歉不知道你不能评论。不,就在这种情况下留下它。
      • @chouaib:不用担心。谢谢! :)
      猜你喜欢
      • 1970-01-01
      • 2019-12-17
      • 2013-12-20
      • 1970-01-01
      • 2013-04-13
      • 2023-03-03
      • 2018-09-16
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多