鱼C论坛

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

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

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

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

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

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


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

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

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

  8. #include<iostream>
  9. #include<cmath>
  10. #include<cstdlib>

  11. class FenShu                                                //定义分数的类
  12. {
  13. public:
  14.         FenShu(int a,int b);                                //构造函数
  15.         FenShu();
  16.         ~FenShu();
  17.         void xianshi();                                        //显示和修改(将6/6显示为1,将1/(-6)显示为-1/6)函数
  18.         void xiugai();
  19.         FenShu operator + (FenShu x);                        //重载运算符函数
  20.         FenShu operator - (FenShu x);
  21.         FenShu operator * (FenShu x);
  22.         FenShu operator / (FenShu x);
  23. private:
  24.         int fenzi;                                                //私有类型:分子,分母
  25.         int fenmu;
  26. };

  27. FenShu::FenShu()                                                //无参数构造器
  28. {
  29.         fenzi=1;
  30.         fenmu=1;
  31. }

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

  42. FenShu::~FenShu()                                                //析构器
  43. {

  44. }

  45. FenShu FenShu::operator +(FenShu x)                        //重载 +
  46. {
  47.         FenShu A1;
  48.         if(fenmu == x.fenmu )
  49.         {
  50.                 A1.fenzi=fenzi+x.fenzi;
  51.                 A1.fenmu=fenmu;
  52.         }
  53.         else
  54.         {
  55.                 A1.fenmu=fenmu*x.fenmu ;
  56.                 A1.fenzi=fenzi*x.fenmu + x.fenzi*fenmu;
  57.         }
  58.         return A1;
  59. }

  60. FenShu FenShu::operator -(FenShu x)                        //重载 -
  61. {
  62.         FenShu A1;
  63.         if(fenmu == x.fenmu )
  64.         {
  65.                 A1.fenzi=fenzi-x.fenzi;
  66.                 A1.fenmu=fenmu;
  67.         }
  68.         else
  69.         {
  70.                 A1.fenmu=fenmu*x.fenmu ;
  71.                 A1.fenzi=fenzi*x.fenmu - x.fenzi*fenmu;
  72.         }
  73.         return A1;
  74. }

  75. FenShu FenShu::operator *(FenShu x)                        //重载 *
  76. {
  77.         FenShu A1;
  78.         {
  79.                 A1.fenzi =fenzi*x.fenzi ;
  80.                 A1.fenmu =fenmu*x.fenmu ;
  81.         }
  82.         return A1;
  83. }

  84. FenShu FenShu::operator /(FenShu x)                        //重载 /
  85. {
  86.         FenShu A1;
  87.         {
  88.                 A1.fenzi =fenzi*x.fenmu ;
  89.                 A1.fenmu =fenmu*x.fenzi ;
  90.         }
  91.         return A1;
  92. }

  93. void FenShu::xianshi()                                        //显示函数
  94. {
  95.         if(fenzi == fenmu)
  96.         {
  97.                 std::cout<<"1";
  98.         }
  99.         else
  100.         {
  101.                 std::cout<<fenzi<<"/"<<fenmu;
  102.         }
  103. }

  104. void FenShu::xiugai()                                        //判断计算的合法性
  105. {
  106.         if(fenmu == 0)
  107.         {
  108.                 std::cout<<"不符合计算要求,分母不能为0\n";
  109.                 //停止程序
  110.         }
  111.         else if(fenmu < 0)                                //当分母为负数时,将分母变正,分子变负
  112.         {
  113.                 fenzi = -fenzi;                                //分子=-分子
  114.                 fenmu = abs(fenmu);                        //绝对值
  115.                 xianshi();
  116.         }
  117.         else
  118.         {
  119.                 xianshi();
  120.         }
  121. }

  122. void main()                                                        //主函数
  123. {
  124.         FenShu a(2,0),b(2,3),c;
  125.         c=a+b;
  126.         a.xiugai();std::cout<<" + ";b.xiugai();std::cout<<" = ";c.xiugai();std::cout<<"\n";                //显示:2/6 + 2/3 = 1
  127.         c=a-b;
  128.         a.xiugai();std::cout<<" + ";b.xiugai();std::cout<<" = ";c.xiugai();std::cout<<"\n";
  129.         c=a*b;
  130.         a.xiugai();std::cout<<" + ";b.xiugai();std::cout<<" = ";c.xiugai();std::cout<<"\n";
  131.         c=a/b;
  132.         a.xiugai();std::cout<<" + ";b.xiugai();std::cout<<" = ";c.xiugai();std::cout<<"\n";
  133.         system("PAUSE");
  134. }
复制代码
最佳答案
2019-8-7 08:52:51
本帖最后由 jackz007 于 2019-8-7 08:58 编辑

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

使用道具 举报

发表于 2019-8-7 07:41:20 | 显示全部楼层
要不直接在程序外面套个if条件语句
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 09:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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