我正在写一个程序,它从一个文本文件中获取几个变量。当程序找到EOF时,
它结束输入数据。
int main()
{
int val, count = 0;
ifstream fileIn;
fileIn.open("num.txt");
fileIn >> val;
while (fileIn)
{
++count;
cout << "number: " << val << endl;
fileIn >> val;
}
cout << "count: " << count << endl;
fileIn.close();
return 0;
}num.txt文件:11 22 33 44
程序输出:
number: 11
number: 22
number: 33
number: 44
count: 4一切都很好。但是如果我将while条件部分从fileIn更改为fileIn.good(),
程序输出将如下所示:
number: 11
number: 22
number: 33
count: 3它现在跳过最后一个值。为什么会发生这种情况?fileIn之间的区别是什么
和fileIn.good()
发布于 2017-01-30 06:00:53
现在跳过最后一个值。为什么会发生这种情况?
fileIn和fileIn.good()有什么不同?
fileIn >> val;
while (fileIn)
{
++count;
cout << "number: " << val << endl;
fileIn >> val;
}用于与fileIn关联的流中的"11 22 33 44"的给定内容。使用bool(fileIn) conversion operator将返回流是否未失败。请注意,到达eof()并不意味着流失败。失败基本上是指I/O操作失败。
因此,在将最后一个数字44读入val之后。因为流没有失败,所以再次进入循环:count递增,打印val,但下一次fileIn >> val将失败。然后将在while循环的条件下对其进行测试,故障将导致循环退出。
如果已经设置了流的任何state flags,则执行fileIn.good()将返回false。具体地说,eof、fail和bad
发布于 2017-01-30 06:03:05
if (fileIn)等效于if (!fileIn.fail()),如果在rdstate()中设置了badbit或failbit,则返回true。
另一方面,fileIn.good()检查rdstate()是否等于0。因此,除了fail()之外,它还检查eofbit标志。
现在跳过最后一个值。为什么会发生这种情况? fileIn和fileIn.good()有什么不同?
因为您读取val,然后使用while(fileIn.good())检查流的条件,然后输出最后一个值,这将永远不会出现,因为然后fileIn设置了eofbit。如上所述,这不是由if(infs)检查的。
https://stackoverflow.com/questions/41926303
复制相似问题