鱼C论坛

 找回密码
 立即注册
查看: 1088|回复: 4

[已解决]break怎么不管用?

[复制链接]
发表于 2019-12-12 23:08:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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”但是还是会继续算下去,怎么才能停下
最佳答案
2019-12-13 11:16:00
命运真悲惨 发表于 2019-12-13 10:33
为啥我输入1/0后他会算出答案等于:-107374176.00

因为你的y没有给它初始化,编译器随机给它一个值。
但是有的编译器,会随机赋值,我的这个就会直接报错。
切记,以后申请变量的时候要赋初值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
请按任意键继续. . .

并不会出现你所说的,继续算下去的情况。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-13 10:33:48 From FishC Mobile | 显示全部楼层
xueziheng 发表于 2019-12-13 09:01
我是用vs2010.
直接拷贝你的代码,输入1/0会报错。


为啥我输入1/0后他会算出答案等于:-107374176.00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-12-13 11:16:00 | 显示全部楼层    本楼为最佳答案   
命运真悲惨 发表于 2019-12-13 10:33
为啥我输入1/0后他会算出答案等于:-107374176.00

因为你的y没有给它初始化,编译器随机给它一个值。
但是有的编译器,会随机赋值,我的这个就会直接报错。
切记,以后申请变量的时候要赋初值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 03:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表