鱼C论坛

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

[已解决]总是异常结束运行。

[复制链接]
发表于 2025-4-19 17:40:53 | 显示全部楼层 |阅读模式

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

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

x
  1. int a_10(int x)
  2. {
  3.     if(x=0)
  4.     {
  5.         return 1;
  6.     }
  7.     if(x>0)
  8.     {
  9.         return a_10(x-1)*10;
  10.     }
  11.     if(x<0)
  12.     {
  13.         throw x;
  14.     }
  15. }
  16. class Fs
  17. {
  18. public:
  19.     int z;
  20.     int m;
  21.     Fs(int a);
  22.     Fs(long double s);
  23.     Fs(int c,int x):z(c),m(x) {}
  24. };
  25. Fs::Fs(int a)
  26. {
  27.     m=rand()%11;
  28.     z=a*m;
  29. }
  30. Fs::Fs(long double s)
  31. {
  32.     int d=-1;
  33.     int con;
  34.     int cons;
  35.     int r[100];
  36.     int ss=int(s);
  37.     while(int(s)!=s&&s<std::numeric_limits<long double>::max()/10&&s<std::numeric_limits<int>::max()/10)
  38.         s*=10;
  39.     for(int c = 0; c <= 100; c++) {
  40.         r[c]=int(s)%10;
  41.         for(int i = 0; i <= 100; i++) {
  42.             if(r[100-i]!=0) {
  43.                 con =100-i+1;
  44.                 break;
  45.             }
  46.         }
  47.     }
  48.     for(int c = 0; c <= 100; c++) {
  49.         r[c]=ss%10;
  50.         for(int i = 0; i <= 100; i++) {
  51.             if(r[100-i]!=0) {
  52.                 cons =100-i+1;
  53.                 break;
  54.             }
  55.         }
  56.     }
  57.     m=a_10(con-cons);
  58.     z=s;
  59. }
复制代码

上边是我编的一个头文件,下面是主文件
  1. #include <iostream>
  2. #include "Fs.h"
  3. using namespace std;
  4. int main() {
  5.     int t;
  6.     int w;
  7.     cout << "请输入一个分子和分母,用逗号隔开"<< endl;
  8.     cin >> t >> w;
  9.     Fs s(t,w);
  10.     cout << "建造分数成功"<< endl;
  11.     cout << "再来一个转换的,整数"<< endl;
  12.     cin >> t;
  13.     cout << "输入进来了"<< endl;
  14.     Fs d(t);
  15.     cout << "建造成功"<< endl;
  16.     cout << "它的分母是"<<d.m<<"而分子是"<<d.z<< endl;
  17.     try
  18.     {
  19.         long double l;
  20.         cout << "再来一个实数的吧"<< endl;
  21.         cin >> l;
  22.         Fs f(l);
  23.         cout << "它的分子是"<<f.z<<"而分母是"<<f.m<< endl;
  24.     }
  25.     catch(int)
  26.     {
  27.         cout << "出错了"<< endl;
  28.     }
  29.     return 0;
  30. }
复制代码

然后他每一次就是到输入完实数实数进去以后就显示运行结束,是为啥呀?
最佳答案
2025-4-19 17:42:21
代码问题分析及解决方案

该代码存在两个关键问题:

  • 条件判断错误
    原代码:if(x=0)(单等号赋值操作)
    应改为:if(x == 0)(双等号比较操作)
  • 缺少负数处理逻辑
    当 x<0 时没有返回值,导致未定义行为


修正后代码

  1. int a_10(int x)
  2. {
  3.     if(x == 0)  // 修正判断条件
  4.     {
  5.         return 1;
  6.     }
  7.     if(x > 0)
  8.     {
  9.         return a_10(x-1) * 10;
  10.     }
  11.     // 处理负数情况
  12.     return 0;  // 或抛出异常/返回错误码
  13. }
复制代码


  • 建议添加参数校验:assert(x >= 0)
  • 该函数功能是计算10的x次方(当x≥0时)
  • 负数情况可根据实际需求修改返回值逻辑


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-19 17:42:21 | 显示全部楼层    本楼为最佳答案   
代码问题分析及解决方案

该代码存在两个关键问题:

  • 条件判断错误
    原代码:if(x=0)(单等号赋值操作)
    应改为:if(x == 0)(双等号比较操作)
  • 缺少负数处理逻辑
    当 x<0 时没有返回值,导致未定义行为


修正后代码

  1. int a_10(int x)
  2. {
  3.     if(x == 0)  // 修正判断条件
  4.     {
  5.         return 1;
  6.     }
  7.     if(x > 0)
  8.     {
  9.         return a_10(x-1) * 10;
  10.     }
  11.     // 处理负数情况
  12.     return 0;  // 或抛出异常/返回错误码
  13. }
复制代码


  • 建议添加参数校验:assert(x >= 0)
  • 该函数功能是计算10的x次方(当x≥0时)
  • 负数情况可根据实际需求修改返回值逻辑


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
换了操作系统以后(WIN10) 发生的很奇怪的现象 (之前也是WIN10)

java环境

idea 内运行  main 方法 或者类似 testNG junt 方法

用debug模式运行方法结束后JVM会立刻退出 很正常

但是用run模式 运行 后 JVM 要等待很久后才会退出 大部分时间需要用ctrl F2 杀死任务

换过 JDK  和 其他版本的 idea 问题依旧  感觉是系统问题  但是不知道如何解决
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-28 09:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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