我对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;
}
这是关于两种不同输入的结果,一种是正确的,一种是错误的。
为什么,当我输入两个字母而不是两个数字时,它会进入default
的情况吗?
[a+b
与您的scanf
的格式字符串不匹配,因为它期望浮点数不是字符(例如a
或b
),因此scanf
不执行任何操作。
scanf
返回它能够读取的项目数,在这种情况下将为0。检查其返回值不是一个坏主意。
由于operation
被初始化为0
,将执行默认情况。
scanf("%f %c %f",&a, &operation, &b);
所以,当您输入a + b:
'a'不是float
scanf
失败(您可以通过查看其返回值进行检查)
scanf
仍使用默认值operation
在switch语句中,没有任何一个case('+','-','*','/','%')都匹配,因为0
因此,将执行默认块。
因为您需要检查scanf的返回值
char operation = 0;