You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义power函数后char*转double函数陷入无限循环求助

问题排查与修复方案

我帮你找到了核心问题,还有几个影响功能的小bug,逐一说明:

1. 无限循环的根源:power()函数无法处理负指数

你的power()函数现在只支持非负的指数,但在change()处理小数部分时,传入的是负指数(比如i=-1、-2...)。看这段循环逻辑:

while (exp != 0) {
    result=result*base;
    exp--;
}

当exp是负数时,exp--会让它变得越来越小(比如-1→-2→-3...),永远不可能等于0,直接导致程序陷入无限循环,自然没有输出。

修复后的power()函数

我们需要让它支持负指数,同时把返回类型改成double(因为负指数会产生小数,用int会丢失精度):

double power(int base, int exp) {
    double result = 1.0;
    if (exp == 0) {
        return 1.0;
    }
    // 标记是否为负指数,同时将指数转为正数计算
    int is_negative = 0;
    if (exp < 0) {
        is_negative = 1;
        exp = -exp;
    }
    while (exp != 0) {
        result *= base;
        exp--;
    }
    // 负指数返回结果的倒数
    return is_negative ? 1.0 / result : result;
}

2. change()函数的其他功能bug

除了无限循环,你的change()还有两个逻辑错误,会导致转换结果不正确:

  • 整数部分赋值错误:你用num1 = ...直接覆盖,而不是累加,比如转换"123"时,最后num1会变成100而不是123,需要改成num1 += ...
  • 小数部分赋值错误:同样是覆盖而不是累加,比如"1.23"会得到0.03而不是0.23,也要改成num2 += ...
  • 多余的小数点查找循环:第二个while (*Point != '.' && *Point)是重复操作,会导致指针位置混乱,直接删掉即可

修复后的change()函数

double change(char* Point) {
    int count = 0;
    double res = 0;
    // 跳过开头的无效0
    while (*Point == '0') {
        Point++;
    }
    // 统计整数部分的位数
    while (*Point != '.' && *Point) {
        count++;
        Point++;
    }
    int num1 = 0;
    // 计算整数部分的值(累加)
    for (int i = 0; i < count; i++) {
        Point--;
        num1 += (*Point - '0') * power(10, i);
    }
    double num2 = 0;
    // 如果没有小数点,直接返回整数部分
    if (*Point != '.') {
        return (double)num1 + num2;
    }
    Point++; // 跳过小数点
    int i = -1;
    // 计算小数部分的值(累加)
    while (*Point) {
        num2 += (double)(*Point - '0') * power(10, i);
        i--;
        Point++;
    }
    res = (double)num1 + num2;
    return res;
}

测试验证

修改后测试你提到的场景:

  • change("5.5") → 返回5.5
  • change("0.0") → 返回0.0
  • change("50") → 返回50.0
  • change("1.5") → 返回1.5
  • change("123.45") → 返回123.45

内容的提问来源于stack exchange,提问作者kasandra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:18:46