加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:40:41 所属栏目:百科 来源:网络整理
导读:我正在修改我的考试,不能理解我们的讲师提供的以下内容: 打开fstream时,检查是否已打开 然后在检查input_file.fail()之前读取 如果你在阅读之前检查,你可能会得到一个 额外不需要的输入 我首先阅读没有意义,你不应该先检查一下吗? 如果有人能够解释,我将非
我正在修改我的考试,不能理解我们的讲师提供的以下内容:

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

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

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读