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版)

10.6 I/O错误处理

当处理输入时,我们必须预计到其中可能发生的错误并给出相应的处理措施。输入中会发生什么类型的错误呢?应该如何处理呢?输入错误可能是由于人的失误(错误理解了指令、打字错误、允许自家的小猫在键盘上散步等)、文件格式不符、我们(程序员)错误估计了情况等等原因造成的。发生输入错误的可能情况是无限的!但istream将所有可能的情况归结为四类,称为流状态(stream state):

不幸的是,fail()和bad()之间的区别并未被准确定义,(定义新类型I/O操作的)程序员对此的观点各种各样。但是,基本的思想很简单:如果输入操作遇到一个简单的格式错误,则使流进入fail()状态,也就是假定我们(输入操作的用户)可以从错误中恢复。另一方面,如果错误真的非常严重,例如发生了磁盘读故障,输入操作会使得流进入bad()状态,也就是假定面对这种情况你所能做的很有限,只能退出输入。这种观点导致如下逻辑:

!cin可以理解为“cin不成功”或者“cin发生了某些错误”或者“cin的状态不是good()”,这与“操作成功”正好相反。请注意我们在处理fail()时所使用的cin.clear()。当流发生错误时,我们可以进行错误恢复。为了恢复错误,我们显式地将流从fail()状态转移到其他状态,从而可以继续从中读取字符。clear()就起到这样的作用——执行cin.clear()后,cin的状态就变为good()。 ...

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