饭-米粒 发表于 2019-8-7 00:38:40

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

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

希望大佬们有更好的方法。{:5_92:} {:5_92:} {:5_92:}

函数如下:
//运算符重载      用法:
//函数类型 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");
}

AmosAlbert 发表于 2019-8-7 07:41:20

要不直接在程序外面套个if条件语句{:10_256:}{:10_256:}{:10_256:}

jackz007 发表于 2019-8-7 08:52:51

本帖最后由 jackz007 于 2019-8-7 08:58 编辑

      这样写程序很累,被零除会引发异常,只要在除法运算之前,设定相关异常捕获,如果异常没有发生,走正常流程方向,否则,走异常处理方向,显示相关提示应该就可以了。
页: [1]
查看完整版本: 求助:C++中有什么可以终止程序的函数么or在子函数中结束程序的办法!