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

计算器赋值函数返回异常结果问题求助

C++计算器赋值操作异常问题

我正在完成Bjarne Stroustrup所著《C++编程:原理与实践》第七章的习题2,需要为计算器实现赋值操作。代码总长500行,已排除经测试无问题的部分,问题出在assignment()函数中:在set_value()后输出变量d能得到正确值,但返回后却得到异常结果。例如输入let c = 3;能正常输出"= 3",但执行c = 2时输出-1.45682e+144而非2。

相关代码片段如下:

class Token {
public:
    char kind;        // what kind of token
    double value;     // for numbers: a value 
    string name;      // for names: name itself
    Token(char ch) : kind(ch), value(0) {}
    Token(char ch, double val) : kind(ch), value(val) {}
    Token(char ch, string n) : kind(ch), name(n) {}
};

class Variable {
public:
    string name;
    double value;
    Variable(string n, double v) :name(n), value(v) { }
};

void set_value(string s, double d)
// set the Variable named s to d
{
    for (int i = 0; i < var_table.size(); ++i)
        if (var_table[i].name == s) {
            var_table[i].value = d;
            return;
        }
    error("set: undefined variable ", s);
}

double assignment(string name)
{
    Token t = ts.get();
    if (t.kind != '=') error("= missing in declaration of ", name);

    double d = expression(); 
    set_value(name, d);
    return d;
}

已知信息:

  • ts.get()会返回对应Token
  • expression()功能正常
  • 调用assignment()前变量已通过let声明
  • var_table是存储变量的vector<Variable>

多次排查未解决该问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:03:12