Cathy-Chen258 发表于 2020-12-3 20:41:18

关于c语言中用switch case来进行表达式运算(小白)

#include <stdio.h>
int main()
{
        int a,b,c;
        char sign;
        printf("请输入表达式:");
        scanf("%d%c%d",&a,&sign,&b);
        switch(sign)
        {
                case '+':c=a+b;
               printf("%d+%d=%d",a,b,c);break;
                case '-':c=a-b;
                printf("%d-%d=%d\n",a,b,c);break;
                case '*':c=a*b;
                printf("%d*%d=%d\n",a,b,c);break;
                case '/':c=a/b;
                        if(b==0)printf("算式输入错误\n");
                        else printf("%d/%d=%d",a,b,c);break;
        }
        return 0;
}


各位热心的网友们帮我看看哪里错了,问题一:被除数为0为什么不输出“算式输入错误”?
                                                      问题二:为什么“b=0”和“b==0”运算除数时输出结果不同?

谢谢你们的回应^_^

rt3 发表于 2020-12-3 21:04:37

本帖最后由 rt3 于 2020-12-3 21:07 编辑

第1个问题
这是编译器的问题。正常情况下 在 c=a/b 那一步就该崩了
如图

第2个问题
b=0是赋值语句,将b赋值为0
b==0只是个布尔表达式,对b的值没有影响

Cathy-Chen258 发表于 2020-12-3 21:10:21

rt3 发表于 2020-12-3 21:04
第1个问题
这是编译器的问题。正常情况下 在 c=a/b 那一步就该崩了
如图


所以不能执行被除数为0那条是吗?如何可以像理想那样当输入被除数为0是输出报错?(顺便问问){:5_96:}

我是June 发表于 2020-12-3 21:20:05

改成这样试试

    case '/':
      if (b == 0)printf("算式输入错误\n");
      else {
            c = a / b;
            printf("%d/%d=%d", a, b, c);break;
      }

rt3 发表于 2020-12-3 21:23:09

本帖最后由 rt3 于 2020-12-3 21:25 编辑

4L那样改就行。也可以这样
case '/':
      if (b != 0){
                            c = a / b;
                            printf("%d/%d=%d", a, b, c);
                        break;
        }else{
                        printf("算式输入错误\n");
                        return 1;
      }

Cathy-Chen258 发表于 2020-12-3 21:46:29

rt3 发表于 2020-12-3 21:23
4L那样改就行。也可以这样

好的真的太感谢你了{:5_92:}
页: [1]
查看完整版本: 关于c语言中用switch case来进行表达式运算(小白)