c - 为什么在这个 switch 语句中匹配 default 大小写?

标签 c switch-statement

我有一个关于 switch 语句的问题。 这是我的代码:

#include<stdio.h>
int main()
{
  float a=0.0f;
  float b=0.0f;
  char operation=0;

  printf("Enter expression:");
  scanf("%f %c %f",&a,&operation,&b);

    switch(operation)
    {
      case '+':
      printf("=%.2f\n",a+b);
      break;

      case '-':
      printf("=%.2f\n",a-b);
      break;

      case '*':
      printf("=%.2f\n",a*b);
      break;

      case '/':
      if(b==0)
      printf("\ndivision by zero error.\n");
      else
      printf("=%.2f\n",a/b);
      break;

      case '%':
      if(b==0)
      printf("\ndivision by zero error.\n");
      else
      printf("=%d\n",(int)a%(int)b);
      break;

      default:
      printf("invalid operation\n");
      break;
    }
    return 0;
}

这是关于两种不同输入的结果,一种正确,一种错误。

my output

为什么当我输入两个字母而不是两个数字时,它会进入 default 大小写?

最佳答案

a+b 不会匹配您的 scanf 的格式字符串,因为它期望 float 而不是字符(如 a b),因此 scanf 不执行任何操作。

scanf 返回它能够读取的项目数,在本例中为 0。检查它的返回值是个不错的主意。

并且由于 operation 被初始化为 0,默认情况下将执行。

关于c - 为什么在这个 switch 语句中匹配 default 大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60916197/

相关文章:

c - C 中的无符号字符陷阱

c++ - 为 doxygen 中的标准库调用生成调用图?

python - 在 C 中嵌入 matplotlib

C 动态结构(malloc 和 free)

c++ - 赋值开关大小写 c++

ios - 如果将某种类型传递给 Swift 中的函数,如何返回 nil?

android - Switch语句Android

c - C中指向结构和数组的指针

delphi - 编译器如何处理 case 语句?

javascript - Javascript switch 语句中的失败问题