洛谷入门B2052:为什么switch加入default提交会报错(显示too long on line1)?
第一个图片里的代码,如果输入的是除法的式子,除法分支case '/' 执行后,因为这个case没有加break,所以后面的default也会执行,所以会导致结果出错;
然后,当输入的不是加减乘除的符号时,除了会打印“Invalid operator!”,后面的switch-caes语句里的default也会执行,所以同样也会让结果出错;
所以,可以在除法分支 case '/' 里加个break,或者将defualt去除,如果default不去除的话,可以在前面的if里面再加个return 0 也可以;但一般的做法是,将if里的打印语句放到default里面。
修改如下:
参考链接:
#include <stdio.h>
#include <math.h>
int main(void){
int a,b;
char c;
scanf("%d %d %c",&a,&b,&c);
if (c!='+'&&c!='-'&&c!='*'&&c!='/'){
printf("Invalid operator!");
return 0; // 当输入的不是加减乘除符号,打印提示信息后,return 0 让程序退出
}
switch(c){
case '+':printf("%d",a+b);break;
case '-':printf("%d",a-b);break;
case '*':printf("%d",a*b);break;
case '/':if (b==0) printf("Divided by zero!");
else printf("%d",a/b);
break; // 除法运算完成,break退出switch-case语句
default :printf("\a"); // 也可以只去除这行代码
}
return 0;
}
\a是什么鬼。为什么要输出这个奇怪的字符
第12行:else printf("%d", a/b); 修改为:else printf("%f", (float)a/b);