鱼C论坛

 找回密码
 立即注册
查看: 1900|回复: 2

[已解决]求助:C++中有什么可以终止程序的函数么or在子函数中结束程序的办法!

[复制链接]
发表于 2019-8-7 00:38:40 | 显示全部楼层 |阅读模式

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

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

x
最近看小甲鱼的视频做了一个运算符重载的作业,具体代码在下面,但是运行的结果还是不太理想。
我希望在分母为0的情况下,直接停止程序并显示相应的内容,现在有一点小想法:
1.利用return 来决定是否执行;需要设置返回值,增加函数;
2.使用exit() 来结束程序,但是运行窗口也随之关闭,看不到提示;


希望大佬们有更好的方法。

函数如下:
//运算符重载        用法:
//函数类型 operator 运算符名称 (行参)
//{
//        对运算符的处理
//}
//例子:实现分数的 + - * /

//存在问题:1.结果的显示不是最简形式        2.当分母为0时,程序无法停止。

#include<iostream>
#include<cmath>
#include<cstdlib>

class FenShu                                                //定义分数的类
{
public:
        FenShu(int a,int b);                                //构造函数
        FenShu();
        ~FenShu();
        void xianshi();                                        //显示和修改(将6/6显示为1,将1/(-6)显示为-1/6)函数
        void xiugai();
        FenShu operator + (FenShu x);                        //重载运算符函数
        FenShu operator - (FenShu x);
        FenShu operator * (FenShu x);
        FenShu operator / (FenShu x);
private:
        int fenzi;                                                //私有类型:分子,分母
        int fenmu;
};

FenShu::FenShu()                                                //无参数构造器
{
        fenzi=1;
        fenmu=1;
}

FenShu::FenShu(int a,int b)                                //带参数构造器
{
        if( b==0 )
        {
                std::cout<<"分母不可以为0...\n";
                exit();//停止程序
        }
        fenzi=a;
        fenmu=b;
}

FenShu::~FenShu()                                                //析构器
{

}

FenShu FenShu::operator +(FenShu x)                        //重载 +
{
        FenShu A1;
        if(fenmu == x.fenmu )
        {
                A1.fenzi=fenzi+x.fenzi;
                A1.fenmu=fenmu;
        }
        else
        {
                A1.fenmu=fenmu*x.fenmu ;
                A1.fenzi=fenzi*x.fenmu + x.fenzi*fenmu;
        }
        return A1;
}

FenShu FenShu::operator -(FenShu x)                        //重载 -
{
        FenShu A1;
        if(fenmu == x.fenmu )
        {
                A1.fenzi=fenzi-x.fenzi;
                A1.fenmu=fenmu;
        }
        else
        {
                A1.fenmu=fenmu*x.fenmu ;
                A1.fenzi=fenzi*x.fenmu - x.fenzi*fenmu;
        }
        return A1;
}

FenShu FenShu::operator *(FenShu x)                        //重载 *
{
        FenShu A1;
        {
                A1.fenzi =fenzi*x.fenzi ;
                A1.fenmu =fenmu*x.fenmu ;
        }
        return A1;
}

FenShu FenShu::operator /(FenShu x)                        //重载 /
{
        FenShu A1;
        {
                A1.fenzi =fenzi*x.fenmu ;
                A1.fenmu =fenmu*x.fenzi ;
        }
        return A1;
}

void FenShu::xianshi()                                        //显示函数
{
        if(fenzi == fenmu)
        {
                std::cout<<"1";
        }
        else 
        {
                std::cout<<fenzi<<"/"<<fenmu;
        }
}

void FenShu::xiugai()                                        //判断计算的合法性
{
        if(fenmu == 0)
        {
                std::cout<<"不符合计算要求,分母不能为0\n";
                //停止程序
        }
        else if(fenmu < 0)                                //当分母为负数时,将分母变正,分子变负
        {
                fenzi = -fenzi;                                //分子=-分子
                fenmu = abs(fenmu);                        //绝对值
                xianshi();
        }
        else
        {
                xianshi();
        }
}

void main()                                                        //主函数
{
        FenShu a(2,0),b(2,3),c;
        c=a+b;
        a.xiugai();std::cout<<" + ";b.xiugai();std::cout<<" = ";c.xiugai();std::cout<<"\n";                //显示:2/6 + 2/3 = 1
        c=a-b;
        a.xiugai();std::cout<<" + ";b.xiugai();std::cout<<" = ";c.xiugai();std::cout<<"\n";
        c=a*b;
        a.xiugai();std::cout<<" + ";b.xiugai();std::cout<<" = ";c.xiugai();std::cout<<"\n";
        c=a/b;
        a.xiugai();std::cout<<" + ";b.xiugai();std::cout<<" = ";c.xiugai();std::cout<<"\n";
        system("PAUSE");
}
最佳答案
2019-8-7 08:52:51
本帖最后由 jackz007 于 2019-8-7 08:58 编辑

        这样写程序很累,被零除会引发异常,只要在除法运算之前,设定相关异常捕获,如果异常没有发生,走正常流程方向,否则,走异常处理方向,显示相关提示应该就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-7 07:41:20 | 显示全部楼层
要不直接在程序外面套个if条件语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-7 08:52:51 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-8-7 08:58 编辑

        这样写程序很累,被零除会引发异常,只要在除法运算之前,设定相关异常捕获,如果异常没有发生,走正常流程方向,否则,走异常处理方向,显示相关提示应该就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-4 03:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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