#include<iostream>
#include<fstream>
using namespace std;
int main()
{
system("cls");
fstream obj;
obj.open("today.txt",ios::in);
char ch;
while (obj)
{
cout<<endl<<"file pointer at :"<<obj.tellg();
obj>>ch;
}
cout<<endl<<obj.tellg();
return 0;
}
输出:
file pointer at :0
file pointer at :1
file pointer at :2
file pointer at :3
file pointer at :4
file pointer at :5
file pointer at :7
file pointer at :8
file pointer at :9
file pointer at :10
file pointer at :11
-1
答案 0 :(得分:2)
从文档中
返回值:
流中的当前位置。如果流缓冲 与流相关联不支持该操作,或者 失败,函数返回-1。
因此tellg
是“失败”。一个常见的原因是您是否点击了流的末尾(此处为文件)。这是有道理的,因为您可以迭代直到流的结尾。
答案 1 :(得分:0)
tellg
返回-1,因为它在读取obj时遇到错误!一旦文件到达末尾while
循环就退出了(没有更多数据可读取),因此obj为null,因此tellg
返回-1。
有关更多信息,请访问此网站- http://www.cplusplus.com/reference/istream/istream/tellg/