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()
,它就会起作用。为什么?
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()
,它就会起作用。为什么?
bad() --> 如果读写操作失败,则返回true。例如,当我们尝试对未打开写入权限的文件进行写入操作,或者尝试写入设备已无剩余空间时。
fail() --> 在与bad()相同的情况下返回true,但在出现格式错误的情况下也会返回true。例如,在尝试读取整数时提取字母字符。
good() --> 这是最通用的状态标志:在与调用任何先前函数相同的情况下返回false。请注意,good和bad不是完全相反的(good一次检查更多的状态标志)。
稍后会详细说明。
我认为这个问题已经在这里得到了解答。
相关摘录: “所有流状态函数——fail、bad、eof和good——都告诉您流的当前状态,而不是预测未来操作的成功。在所需操作之后检查流本身(相当于倒置的fail检查)”。
false
,请参见这里。 - grisha