有什么区别!std :: basic_ios :: fail()和std :: basic_ios :: good()?

时间:2015-07-28 20:12:30

标签: c++

while(true)
{

int a, c;
string b;

file >> a >> b >> c;
if( file.good() )
    f(a, b, c);`
else
    break;
}

此代码未读取最后一行的.txt文件。如果我将file.good()更改为!file.fail()则可行。为什么?

2 个答案:

答案 0 :(得分:4)

坏() - >如果读取或写入操作失败,则返回true。例如,在我们尝试写入未写入的文件或者我们尝试写入的设备没有剩余空间的情况下。

失败() - >在与bad()相同的情况下返回true,但在发生格式错误的情况下也是如此,例如在我们尝试读取整数时提取字母字符时。

good() - >它是最通用的状态标志:它在调用任何先前函数返回true的相同情况下返回false。请注意,好的和坏的不完全相反(一次检查更多状态标志)。

将详细说明后者。

答案 1 :(得分:3)

我认为这涵盖here

相关摘录: "所有流状态函数 - 失败,错误,失败和良好 - 告诉您流的当前状态,而不是预测未来操作的成功。在所需的操作"

之后检查流本身(相当于倒置失败检查)