这是代码。
它给出了如下所示的EXACT输出意味着它正在读取文件。
但它也显示fails
,因为您可以看到fin.fails()
是true
。
我想知道为什么这是真的,虽然我成功地阅读了文件。
#include<fstream>
#include<iostream>
using namespace std;
int main()
{ ifstream fin;
fin.open("pro.txt");
char ch;
int data;
while(!fin.eof())//!(fin >> ch).eof()
{
fin.get(ch);
cout<<ch;
if(fin.fail()) {
cout<<"fails";
break;
}
}
fin.clear();
fin.seekg(0);
int pos=(int)fin.tellg();
cout<<"\n this is :"<<pos;
fin.close();
return 0;
}
Output is :
this is my name
fails
this is 0
Contents of pro.txt:
this is my name
不知道为什么会这样!
答案 0 :(得分:0)
仍然无法找到为什么fin.fails()
是真的,因为我认为没有人愿意
但我想出了在不fin.fails()
= true
的情况下阅读空格和文件。
只需将while(!fin.eof())
替换为while(fin.get(ch))
,然后移除身体中存在的fin.get(ch)
- &gt;这就是为什么我的输出为每次读取跳过一个字符的原因..这是我在评论中提到的。
答案 1 :(得分:0)
问题如下:使用get
读取文件中的最后一个字符会不设置eofbit
,因此请拨打fin.eof()
在读取循环体内文件的最后一个字符后,while
条件仍返回false
。然后在读取最后一个字符之后的迭代期间,您尝试读取循环体内的另一个字符,即使没有字符可供读取。这会根据eofbit
的{{3}}设置failbit
和 get
。
TL; DR:读取文件末尾应该设置failbit
。