命运真悲惨 发表于 2019-12-12 23:08:15

break怎么不管用?

#include<stdio.h>
int main()
{
    int d1,d2;
        char x;
        float y;
        printf("请输入算式:");
        scanf("%d %c %d",&d1,&x,&d2);


        switch(x)
        {
        case '-':d2=-d2;
        case '+':y=(float)d1+d2;break;
        case '*':y=(float)d1*d2;break;
        case'/':
                if(d2==0)
                {
                        printf("不能除0\n");break;
                }
                else
                {
                        y=(float)d1/d2;break;
                }
        }

                printf("awnser=%.2f\n",y);





return 0;
}



在算“1/0”时虽然会显示“不能除0”但是还是会继续算下去,怎么才能停下

xueziheng 发表于 2019-12-13 09:01:31

我是用vs2010.
直接拷贝你的代码,输入1/0会报错。

报错原因为-The variable 'y' is being used without being initialized.
就是y没有初始化。

要是你给y赋初值了,当你输入1/0时,会输出,你所赋的初值。

我赋的初值为0.0,结果如下。
请输入算式:1/0
不能除0
awnser=0.00
请按任意键继续. . .

并不会出现你所说的,继续算下去的情况。

命运真悲惨 发表于 2019-12-13 10:33:48

xueziheng 发表于 2019-12-13 09:01
我是用vs2010.
直接拷贝你的代码,输入1/0会报错。



为啥我输入1/0后他会算出答案等于:-107374176.00

sunrise085 发表于 2019-12-13 11:14:03

你的程序之所以出错是因为变量y没有初始化,当输入除0的算式,变量y没有进行赋值,所以变量y的值是不确定的,这要看之前该存储空间中是什么内容了,在程序最后输出变量y就会出错。
实际上,除0的时候就不应该再输出answer。
此外switch中,最后一个case 是可以不用break的。
帮你修改了一下程序。#include<stdio.h>
int main()
{
    int d1,d2;
    char x;
    float y=0.0;
    printf("请输入算式:");
    scanf("%d %c %d",&d1,&x,&d2);
    switch(x)
    {
      case '-':d2=-d2;
      case '+':y=(float)d1+d2;break;
      case '*':y=(float)d1*d2;break;
      case'/':
            if(d2==0)
            {
                printf("不能除0\n");
            }
            else
            {
                y=(float)d1/d2;
            }
    }
    if(x!='/'||d2!=0)
      printf("awnser=%.2f\n",y);
    return 0;
}

xueziheng 发表于 2019-12-13 11:16:00

命运真悲惨 发表于 2019-12-13 10:33
为啥我输入1/0后他会算出答案等于:-107374176.00

因为你的y没有给它初始化,编译器随机给它一个值。
但是有的编译器,会随机赋值,我的这个就会直接报错。
切记,以后申请变量的时候要赋初值
页: [1]
查看完整版本: break怎么不管用?