洛谷C语言新手入门提问

洛谷入门B2052:为什么switch加入default提交会报错(显示too long on line1)?

img

img

img

img

第一个图片里的代码,如果输入的是除法的式子,除法分支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;
    
} 

img

\a是什么鬼。为什么要输出这个奇怪的字符

第12行:else printf("%d", a/b); 修改为:else printf("%f", (float)a/b);