为什么在此switch语句中匹配默认大小写?

问题描述 投票:2回答:3

我对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的情况吗?

c switch-statement
3个回答
3
投票

[a+b与您的scanf的格式字符串不匹配,因为它期望浮点数不是字符(例如ab),因此scanf不执行任何操作。

scanf返回它能够读取的项目数,在这种情况下将为0。检查其返回值不是一个坏主意。

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


2
投票

scanf("%f %c %f",&a, &operation, &b);

所以,当您输入a + b

  1. 'a'不是float

  2. scanf失败(您可以通过查看其返回值进行检查)

  3. scanf仍使用默认值operation

在switch语句中,没有任何一个case('+','-','*','/','%')都匹配,因为0

因此,将执行默认块。


1
投票

因为您需要检查scanf的返回值

char operation = 0;
© www.soinside.com 2019 - 2024. All rights reserved.