gpt4 book ai didi

c++ - 作者的代码是否正确? - B. Stroustrup 的 PPP 使用 C++ : Chapter 7, 第 7.2 节 - 输入和输出

转载 作者:行者123 更新时间:2023-11-28 02:25:45 26 4
gpt4 key购买 nike

我正在使用 B. Stroustrup 的 PPP 使用 C++,第一版学习 C++。第 7 章是第 6 章的扩展,其中开发了一个基本的计算器,它采用表达式(如 1+2;)来产生输出(';' 用于终止表达式)。 (我使用的是 Visual Studio 2013)

在7.2节中,为用户改进程序的布局,作者期望这样——

> 2+3;
=5
> 5*7;
=35
>

and(输入多个表达式)

> 2+3; 5*7; 2+9;
=5
> =35
> =11
>

通过使用此代码 -

main():

double val = 0;
while (cin) {
cout << "> "; // print prompt
Token t = ts.get(); // get token from Token_stream ts
if (t.kind == 'q' ) break; // 'q' for quit
if (t.kind == ';' ) // ';' to print value
cout << "= " << val << '\n'; // print result
else
ts.putback(t); // put back token in Token_stream ts
val = expression(); // evaluate expression
}

但据我所知,这段代码无法生成这样的输出,而是像这样工作,

  1. 读取 token
  2. 如果要退出或打印一些值,那么就执行,否则就放 token 返回到 Token_stream。
  3. 然后,计算一个表达式的值(假设有用户输入的表达式)。如果没有要读取的表达式/标记,程序将等待输入(在 primary() 函数中)。
  4. 表达式求值后,转到第 1 步。

因此,只有当 main() 检测到 ';' 时才会打印表达式的值,而 > 将每次都被打印,甚至在打印表达式的值之前,甚至一个简单表达式的输出,1+2; 我的程序是 -

> 1+2;
> =3
2+3;
> =5
_

第 3 行带有光标(有意使用下划线)。

那么,我是否更正了作者使用了错误的代码?还是我只是疯了,还有其他我看不到的东西?

Here是计算器的完整代码。

Here是库 std_lib_facilities.h

最佳答案

你没疯。

已出版的书籍存在错误并非闻所未闻。通常,一本书的相应网站会有一个在线“勘误表”,其中包含等待下次打印的所有更正。

我刚查过。我在 Stroustrup 的网站上发现了一些拼写错误。这是他的书勘误表的链接:http://www.stroustrup.com/Programming/PPP2errata.html

我没有看到第 7 章的任何内容。但是如果你确定你发现了一个错误,请给他发一封电子邮件。他有可能回复并感谢您。

我认为你的代码块只是因为这一行而出现轻微错误:

cout << "> "; // print prompt

它在每次 token 消耗时打印 > 字符。

我觉得这样比较合理:

double val = 0;

cout << "> "; // print prompt the first time.

while (cin)
{
Token t = ts.get(); // get token from Token_stream ts

if (t.kind == 'q' )
{
break; // 'q' for quit
}

if (t.kind == ';' ) // ';' to print value
{
cout << "= " << val << '\n'; // print result
cout << "> "; // print new prompt
}
else
{
ts.putback(t); // put back token in Token_stream ts
}

val = expression(); // evaluate expression
}

关于c++ - 作者的代码是否正确? - B. Stroustrup 的 PPP 使用 C++ : Chapter 7, 第 7.2 节 - 输入和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30724790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com