首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ifstream.good()和bool(ifstream)之间的区别

ifstream.good()和bool(ifstream)之间的区别
EN

Stack Overflow用户
提问于 2017-01-30 05:45:24
回答 2查看 12.4K关注 0票数 9

我正在写一个程序,它从一个文本文件中获取几个变量。当程序找到EOF时,

它结束输入数据。

代码语言:javascript
复制
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

程序输出:

代码语言:javascript
复制
number: 11
number: 22
number: 33
number: 44
count: 4

一切都很好。但是如果我将while条件部分从fileIn更改为fileIn.good()

程序输出将如下所示:

代码语言:javascript
复制
number: 11
number: 22
number: 33
count: 3

它现在跳过最后一个值。为什么会发生这种情况?fileIn之间的区别是什么

fileIn.good()

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-30 06:00:53

现在跳过最后一个值。为什么会发生这种情况?fileInfileIn.good()有什么不同?

代码语言:javascript
复制
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。具体地说,eoffailbad

票数 5
EN

Stack Overflow用户

发布于 2017-01-30 06:03:05

if (fileIn)等效于if (!fileIn.fail()),如果在rdstate()中设置了badbitfailbit,则返回true。

另一方面,fileIn.good()检查rdstate()是否等于0。因此,除了fail()之外,它还检查eofbit标志。

现在跳过最后一个值。为什么会发生这种情况? fileIn和fileIn.good()有什么不同?

因为您读取val,然后使用while(fileIn.good())检查流的条件,然后输出最后一个值,这将永远不会出现,因为然后fileIn设置了eofbit。如上所述,这不是由if(infs)检查的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41926303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档