为什么while(文件>> a)有效?

时间:2017-10-03 07:01:08

标签: c++ file while-loop

我必须从只有少数数字的文件中读取。阅读它,总结它们就是这样。 (学习C ++)。如果我使用fstream :: eof()函数,它会读取最后一个数字两次,所以我这样做:

#include <iostream>
#include <fstream>

using namespace std;

int main() {
    fstream file;
    int a = 0, sum = 0;

    file.open("nums.txt",fstream::in);

    if (!file.is_open()) {
        cout << "Unable to open file!\n" << endl;
    }

    while (file >> a) {
        cout << a << endl;
        sum += a;
    }

    cout << "Sum: " << sum << endl;

    file.close();

    getchar();
    return 0;
}

现在它没有读取最后一个数字两次,但我不明白while()括号中发生了什么,我想如果我读0它会停止,但它也会读取它。是文件&gt;&gt;实际上返回的内容类似于“托管阅读”= 1和“失败”= 0 ??

由于

2 个答案:

答案 0 :(得分:7)

  

是文件&gt;&gt;一个实际上回归的东西

是。它返回对file本身的引用。 std::fstream可通过其operator bool

在上下文中转换为bool

它实质上返回了流fail()成员的逻辑反转。

答案 1 :(得分:3)

>>运算符在应用于流时返回相同的流。这就是你可以写file >> a >> b之类的东西的原因。流也会发生operator bool(),相当于!fail()。因此,一旦流已达到eof,operator bool()将返回false,并且由于>>返回流,while (file >> a)将循环直到流达到eof(或具有误差)。