为什么我们总是检查输入是否失败而不是输出?

时间:2014-01-12 16:06:13

标签: c++ c++11

为什么我们总是这样做

if (cin >> var)

但永远不要这样做

if (cout << var)

我们不想检查它是否成功?

3 个答案:

答案 0 :(得分:6)

在输入上生成文件结束很容易。例如,输入可能来自文件。或者交互式用户可能会以某种命令解释器特定的方式指示EOF(例如,Windows中的Ctrl Z或* nix中的Ctrl D)。

通常会导致输入失败。

对于格式化输入的cin >> var,也可能无法将输入文本解释为相关类型值的规范。

这些都不适用于输出。

输出可能会失败,但通常只是由于存储单元变满等灾难性原因造成的。

答案 1 :(得分:4)

前提是错误的:并非所有的写入都未经检查。

作为已检查写入的示例,请考虑数据库。在回答确认提交请求之前,数据库通常会确保数据已正确写入磁盘或复制(并确认)到另一个实例。

因此,软件检查写入的次数要少,而且检查的次数与读取次数不同:读取失败意味着程序无法继续(通常),因为它缺少数据;另一方面,程序可以在写入失败后继续,因为它已有数据!

因此,检查的唯一写入是程序保证要检查的那些,例如数据库写入硬盘,以确保软件承诺的数据的持久性。另一方面,很少(如果有的话)检查对日志文件或控制台屏幕的写入:日志文件通常不应该妨碍(并且它们是异步记录的)并且如果对控制台屏幕的写入失败,则用户将可能无论如何重放命令或管道中的下一个程序将自行失败......

答案 2 :(得分:0)

输入是程序无法控制的东西。

例如人类在打字时并不准确。因此,您可以让程序采取措施让用户再次使用等等。

关于输出,您可以查看。但对于人类来说,事情是不可能的。写入文件但输出到屏幕时不是这样。如果您无法将输出写入控制台,您可以做什么?