我正在使用Stroustrup的编程原理和实践学习c ++,并且有一个示例代码,一个是调试并使其工作。我已经进行了更正,当您输入使用+或 - 运算符的算术表达式时,它可以正常工作。但是,当我使用*运算符输入表达式时,没有任何反应。我使用调试器来帮助我完成代码,但我还没弄清楚。本书使用非标准包含文件std_lib_facilities.h
实际的计算器程序是here。有人可以帮助我弄清楚为什么表达像2 * 3;在2 + 3时没有产生结果;作品?
PS:根据程序,有效表达式必须在末尾有;
才能触发打印。所以2 + 3;是正确的,将触发和打印,但没有;
的2 + 3只会导致光标一直闪烁。请不要这样,它是第一次尝试生成计算器程序,因此它缺少很多功能。我现在关心的是弄清楚为什么涉及*
运算符的简单算术表达式不起作用。感谢。
[编辑]
感谢@KonradRudolph的回答。有一件事让我感到困惑的是,当我使用gdb调试器(我在linux上)时,当我输入带*的表达式时,调试器不会进入术语。现在我知道有一个错误但是,我期待它至少进入该功能并挂在那里的某个地方。为什么调试器步骤进入有错误的函数?这将更有帮助。
答案 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
声明。
可能会有更多错误。