首页 > 解决方案 > 为什么tellg() 在代码末尾返回-1?

问题描述

#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

标签: c++

解决方案


从文档:

返回值:

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

tellg“失败”也是如此。一个常见的原因是,如果您到达流的末尾(此处为文件)。这是有道理的,因为您迭代直到之前的流结束。


推荐阅读