我只是在复习我的考试,无法理解我们讲师提供的以下内容:
打开fstreams时,检查是否打开
然后在检查 input_file.fail() 之前阅读
如果您在阅读前检查,您可能会得到额外的不需要的输入
先读对我来说没有意义,你不应该先检查吗?
如果有人能够解释,我将非常感激:)
input_file.fail()
确定前面的操作是否失败,而不是下一个操作是否会失败。因此,如果你这样写:
if (!input_file.fail()) {
int value;
input_file >> value;
/* ... process value ... */
}
然后在阅读之后value
,你不知道你是否真的成功地阅读了任何东西。您所知道的是,在您阅读之前,一切正常。您很可能未能读取整数,因为您到达文件末尾,或者文件中的数据不是整数。
另一方面,如果你写
int value;
input_file >> value;
if (!input_file.fail()) {
/* ... process value ... */
}
然后你尝试做一个阅读。如果成功,您将处理您读取的值。如果没有,您可以对最后一次操作失败的事实做出反应。
(你可以比这更可爱:
int value;
if (input_file >> value) {
/* ... process value ... */
}
它将读取和测试操作合二为一。这里更清楚的是您确认读取成功。)
如果您在循环中进行读取,那么一种非常干净的方法是
for (int value; input_file >> value; ) {
/* ... process value ... */
}
这清楚地表明您在能够继续从文件中读取值时循环。
希望这可以帮助!