我有一个存储在文本文件中的n×2矩阵。我尝试用C读取它++C++中的文件结尾
nb_try=0;
fin>>c_tmp>>gamma_tmp;
while (!fin.eof()) //if not at end of file, continue reading numbers
{
// store
cs_bit.push_back(c_tmp);
gammas_bit.push_back(gamma_tmp);
nb_try++;
// read
fin>>c_tmp;
assert(!fin.fail()); // fail at the nb_try=n
if(fin.eof())break;
fin>>gamma_tmp; // get first number from the file (priming the input statement)
assert(!fin.fail());
}
第一断言失败,系统即fin.fail()为真,当nb_try == N,当它试图读取不存在所述第一数量恰好。但是,在阅读最后一个数字后,fin.eof()怎么不是真的?这是否意味着只有在读取不存在的第一个数字时才会变为真? fin.fail()和fin.eof()在同一时间也变成了真的吗?
感谢和问候!
谢谢!当fin.eof()完全正确时?读完文件中的最后一个数字后,或者在尝试读取不存在的第一个数字之后? fin.fail()的同样问题? – Tim 2009-09-29 19:16:47
当您尝试并阅读__past__ EOF时,EOF为true。读到文件末尾不会改变状态。因此,当您读取文件末尾不存在的第一个值时,EOF会变为真。 – 2009-09-29 19:18:49
再次感谢!这澄清了EOF。对于ifstream :: fail(),如果第一次读取文件的末尾,就像eof()一样,它是否成为真?在我的例子中,这似乎是真的。但是我从http://www.cplusplus.com/reference/iostream/ios/fail/了解到,“如果failbit或badbit被设置,函数返回true,至少有一个标志在其他错误时被设置比在输入操作期间发生的文件结束“。它是否说失败()不会因为EOF发生而变为真? – Tim 2009-09-29 20:54:40