0

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

实际的计算器程序在这里。有人可以帮我弄清楚为什么像 2*3 这样的表达式吗?2+3 时不产生结果;作品?

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

[编辑]

感谢@KonradRudolph 的回答。让我难过的一件事是,当我使用 gdb 调试器(我在 linux 上)时,当我输入带有 *. 现在我知道有一个错误,但我希望它至少能进入函数并挂在那里的某个地方。为什么调试器不会进入有错误的函数?那会更有帮助。

4

1 回答 1

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声明。

可能会有更多错误。

于 2013-02-21T10:38:38.177 回答