为什么我必须为搜索结束文件提供负两个偏移量

时间:2015-04-25 14:50:36

标签: c++ iostream

所以我正在阅读有关文件处理的内容,并希望从最后读取一个文本文件。所以我决定使用

寻找指向最后一个字符的get指针

seekg(-2,ios::end);

我的完整代码是:

fin.open("source.txt");
fin.seekg(-2,ios::end);

fin>>ch;
if(fin.fail())
    cout<<"uh oh!";
else
    cout<<ch;

我的问题是为什么我必须使偏移-2而不是-1,因为我假设ios::end将get指针放在文件的最后一个有效字符之后的一个位置。

有任何帮助吗? 感谢。

1 个答案:

答案 0 :(得分:1)

您输入错误的原因是您使用>>,并确实将最后一个字符设为'\n'或空格。

在-1上找到你的位置&#39; \ n&#39;但被提取器>>忽略了它(skips all whitespaces和&#39; \ n&#39;) 。如果您之前使用-2定位一个字符,那么您肯定会使用最后一个非空格字符并且它可以正常工作。

要真正了解文件末尾的内容:

in.open("source.txt");
fin.seekg(-1,ios::end);  // -1 is really the last char of the file 

ch = fin.get();  // read one character without ignoring anything
if(fin.fail())
    cout<<"uh oh!";
else
    cout<<(int)ch <<"="<<ch<<endl;  // display char code (if not printable) and char