视觉 作者的代码是否正确?B. Stroustrup的PPP使用C++:第7章,第7.2节 - 输入和输出
visual Is the author's code correct? - B. Stroustrup's PPP using C++: Chapter 7, Section 7.2 - Input & Output
我正在使用B. Stroustrup的PPP使用c++,第一版学习c++。第7章是对第6章的扩展,其中开发了一个基本计算器,它接受表达式(如1+2;)来产生输出(';'表示终止表达式)。(我使用的是Visual Studio 2013)
在7.2节中,为了使用户改进程序的布局,作者期望-
> 2+3;
=5
> 5*7;
=35
>
和(输入多个表达式)
> 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
}
但是据我所知,这段代码不能产生这样的输出,它的工作方式是这样的,
- 读取令牌
- 如果要退出或打印一些值,那么执行它,否则放置它
- 然后,计算表达式的值(假设存在)由用户输入的表达式)。如果没有要读取的表达式/令牌,程序就等待输入(在
primary()
函数中)。 - 表达式求值完成后,转到步骤1
因此,只有当main()
检测到';'
时才会打印表达式的值,而>
每次都会打印,甚至在打印表达式的值之前,甚至一个简单的表达式1+2;
的输出都是-
> 1+2;
> =3
2+3;
> =5
_
在第三行带有光标(故意使用下划线)。
所以,我是正确的,作者是使用错误的代码?还是我只是疯了,还有别的东西在那里,我看不见?
这是计算器的完整代码。
这是库std_lib_facilities.h
你没疯。
出版的书有bug并不是闻所未闻的。通常情况下,一本书的相应网站会有一个在线的"勘误表",其中包含下一次印刷所需的所有更正。
我刚检查过。我在Stroustrup的网站上发现了一些错别字。这是他的书的勘误表的链接:http://www.stroustrup.com/Programming/PPP2errata.html
我没有看到第7章的任何内容。但是如果你确定你发现了一个bug,一定要给他发邮件。他有可能会回复你并谢谢你。
我认为你的代码块只有轻微的bug,因为这一行:
cout << "> "; // print prompt
在每次使用令牌时打印>
字符。
我认为这更合理:
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++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- LLVM 教程 3.6 尝试编译第 8 章输出时的链接器错误
- C++解密第13章(2004)JeffKent:Ifstream程序不返回预期的输出
- 视觉 作者的代码是否正确?B. Stroustrup的PPP使用C++:第7章,第7.2节 - 输入和输出