Jon*_*Mee 12 c++ file-io stream filestream
我把我想通过一个循环,每次检查流的有效性的答案在这里.
我使用的原始代码good
与此类似:
ifstream foo("foo.txt");
while (foo.good()){
string bar;
getline(foo, bar);
cout << bar << endl;
}
Run Code Online (Sandbox Code Playgroud)
我立刻指着这里告诉我永远不要测试good
.显然,这是我无法理解的,但我想正确地进行文件I/O.
我用几个例子测试了我的代码,但无法使测试good
代码失败.
首先(这打印正确,以新行结束):
bleck 1 blee 1
2
blah
以新行结束
第二个(正确打印,以最后一行结束):
bleck 1 blee 1
2
blah
这不会以新的一行结束
第三个是一个空文件(正确打印,一个换行符.)
第四个是丢失的文件(这没有正确打印.)
有人可以用一个例子来帮助我,说明为什么 good
不应该做测试?
他们错了.口头禅是"永不测试.eof()
".
甚至那个咒语也是过分的,因为两者都有助于在提取失败后诊断流的状态.
所以咒语应该更像
在尝试进一步阅读之前,请勿使用
good()
或eof()
检测eof
同样的fail()
,和bad()
当然stream.good
可以在使用流之前有用(例如,如果流是尚未成功打开的文件流)
然而,两者都非常经常被滥用以检测输入的结束,而这不是它的工作方式.
一个典型的例子,说明为什么你不应该使用这个方法:
std::istringstream stream("a");
char ch;
if (stream >> ch) {
std::cout << "At eof? " << std::boolalpha << stream.eof() << "\n";
std::cout << "good? " << std::boolalpha << stream.good() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
打印
false
true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3282 次 |
最近记录: |