为什么tellg()在代码末尾返回-1?

时间:2020-08-09 05:34:34

标签: c++

#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

2 个答案:

答案 0 :(得分:2)

从文档中

返回值:

流中的当前位置。如果流缓冲 与流相关联不支持该操作,或者 失败,函数返回-1。

因此tellg是“失败”。一个常见的原因是您是否点击了流的末尾(此处为文件)。这是有道理的,因为您可以迭代直到流的结尾。

答案 1 :(得分:0)

tellg返回-1,因为它在读取obj时遇到错误!一旦文件到达末尾while循环就退出了(没有更多数据可读取),因此obj为null,因此tellg返回-1。

有关更多信息,请访问此网站- http://www.cplusplus.com/reference/istream/istream/tellg/