C ++计算器不适用于*运算符

时间:2013-02-21 10:30:26

标签: c++ debugging

我正在使用Stroustrup的编程原理和实践学习c ++,并且有一个示例代码,一个是调试并使其工作。我已经进行了更正,当您输入使用+或 - 运算符的算术表达式时,它可以正常工作。但是,当我使用*运算符输入表达式时,没有任何反应。我使用调试器来帮助我完成代码,但我还没弄清楚。本书使用非标准包含文件std_lib_facilities.h

实际的计算器程序是here。有人可以帮助我弄清楚为什么表达像2 * 3;在2 + 3时没有产生结果;作品?

PS:根据程序,有效表达式必须在末尾有;才能触发打印。所以2 + 3;是正确的,将触发和打印,但没有;的2 + 3只会导致光标一直闪烁。请不要这样,它是第一次尝试生成计算器程序,因此它缺少很多功能。我现在关心的是弄清楚为什么涉及*运算符的简单算术表达式不起作用。感谢。

[编辑]

感谢@KonradRudolph的回答。有一件事让我感到困惑的是,当我使用gdb调试器(我在linux上)时,当我输入带*的表达式时,调试器不会进入术语。现在我知道有一个错误但是,我期待它至少进入该功能并挂在那里的某个地方。为什么调试器步骤进入有错误的函数?这将更有帮助。

1 个答案:

答案 0 :(得分:5)

嗯,你根本没有做出所有必要的更正。

term

    switch (t.kind) {
    case '*':
        left *= primary();
        t = ts.get();
    case '/':
        {    
            double d = primary();
            if (d == 0) error("divide by zero");
            left /= d; 
            t = ts.get();
            break;
        }
    default: 
        ts.putback(t);     // put t back into the token stream
        return left;
    }

case '*'缺少break声明。

可能会有更多错误。