我必须从只有少数数字的文件中读取。阅读它,总结它们就是这样。 (学习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 ??
由于
答案 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(或具有误差)。