c – 为什么先读取文件然后检查?

前端之家收集整理的这篇文章主要介绍了c – 为什么先读取文件然后检查?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在修改我的考试,不能理解我们的讲师提供的以下内容

打开fstream时,检查是否已打开

>然后在检查input_file.fail()之前读取
>如果你在阅读之前检查,你可能会得到一个
额外不需要的输入

我首先阅读没有意义,你不应该先检查一下吗?

如果有人能够解释,我将非常感激:)

解决方法

input_file.fail()确定是否有任何先前的操作失败,而不是即将进行的操作是否会失败.因此,如果你这样写:
if (!input_file.fail()) {
    int value;
    input_file >> value;

    /* ... process 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 ... */
}

这清楚地表明,在您能够继续从文件中读取值时循环.

希望这可以帮助!

猜你在找的C&C++相关文章