Skip to Content
C++程序设计:原理与实践(基础篇)(原书第2版)
book

C++程序设计:原理与实践(基础篇)(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
Pearson
Content preview from C++程序设计:原理与实践(基础篇)(原书第2版)

6.8.3 读数值

现在,我们必须处理数值,事实上这不是一件容易的事。如何获得123这个数值呢?当然,它可由100+20+3得来,但12.34又如何获得呢?另外,我们应该允许使用科学计数法(如12.34e5)吗?为了正确实现这些功能,可能需要花几个小时甚至几天时间,幸运的是,我们可以不必做这个工作。输入流能够解析C++字面常量,并能将其转换为double类型的数值。因此,我们所要做的只是如何在get()函数中告诉cin完成这些工作而已:

某种程度上,我们是随意选择了‘8’来表示“数值”这类单词。

那么,我们如何知道输入中出现了一个数值呢?如果根据经验来推测,或者是参考C++文献(如附录A),我们会发现一个数值常量必须以一个阿拉伯数字或者小数点开头。因此,我们可以在程序中检测这些符号,来判断是否出现数值。接下来,我们希望cin完成数值的读取,但我们已经读入了第一个字符(一个阿拉伯数字或小数点)。因此,我们需要将第一个字符的数值和cin读入的后续字符的值结合起来。例如,输入123,我们会得到1,cin读入23,我们需要将100与23相加。这太繁琐了!幸运的是(并不是偶然的),cin与Token_stream的工作方式类似,也可以把已经读出的字符放回输入流中。因此,不用做繁琐的数学运算,我们只需把第一个字符放回cin,然后由cin读入整个数值。

请注意,我们如何一次又一次地避免做复杂的工作,代之以寻找简单的解决方案——通常是借助于C++库。这就是程序设计的本质:不断地寻找更简单的方法。这与“优秀的程序员都是懒惰的”(看起来有些好笑?)不谋而合。从这个角度说(当然,也只有从这个角度),我们应该“懒惰”,如果能找到一个更简单的方法,我们何必写那么多代码呢? ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉

Publisher Resources

ISBN: 9787111562252