提问人:bulug 提问时间:10/24/2023 最后编辑:bulug 更新时间:10/24/2023 访问量:68
计算器赋值函数中的意外结果
Unexpected result in assignment function for a calculator
问:
我目前正在尝试解决Bjarne Stroustrup的“编程:使用C++的原理和实践”第7章的练习2。
我必须在代码中实现赋值操作。代码有 500 行长,所以我将省略我已经彻底测试过并且我知道不是问题原因的段。
问题出在函数上,更具体地说,如果 i 的值在 之后,则输出正确的值,但返回不同的值。例如:assignment()
cout
d
set_value()
如果我输入:
let c = 3;
代码将按预期输出,但如果我继续进行赋值操作,请键入:"= 3"
c = 2
代码输出 ,与 2 不同。-1.45682e+144
代码如下:
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()
如果它在输入中找到字符串或双精度,则返回包含 AND 的适当标记,或者仅针对其他可以表示为字符的文字(例如运算符,或者在本例中为 )。kind
value
kind
'='
expression()
计算并返回它找到的成瘾、减法、乘法、除法和模的任意组合,并且还支持括号 、 和 。它工作得很好。sqrt()
pow()
由于我在调用之前已经检查了是否已经通过语句声明了,因此我只调用将名为 的变量的成员更改为 。name
let
assignment()
set_value()
value
s
d
var_table
是我声明的所有变量。vector
我已经为这个问题解决了几个小时,但无法解决。科学记数法奇怪的数字输出是如此随机,并且以某种方式发生在正常工作和 .set_value()
return d;
如果你好奇,可以在这里找到完整的代码 https://collabedit.com/5pa6h
答: 暂无答案
评论
Token
string
value
set_value()
set_value()
return d
return d
cout
return d