c++ - 为什么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
解决方案
从文档:
返回值:
流中的当前位置。如果与流关联的流缓冲区不支持该操作,或者如果它失败,则该函数返回 -1。
tellg
“失败”也是如此。一个常见的原因是,如果您到达流的末尾(此处为文件)。这是有道理的,因为您迭代直到之前的流结束。
推荐阅读
- reactjs - 在 Swiper + React 中显示单词“PREV”和“NEXT”而不是导航箭头
- facebook-like - Android Java - 实现 Facebook 点赞按钮
- java - tomcat 在包路径中找不到 servlet
- mysql - MYSQL 累计数量之和
- jpos - ISOUtil.hex2byte 在我的消息左侧附加 0
- swift - TextView 自定义子类 - textViewDidChange 不触发
- pandas - 在同一类型列上合并两个数据框会给我错误的结果
- c# - .NET Core 3 Worker 服务设置依赖注入
- r - 从一列与 R 中的一个整数进行比较
- python - python如何在第一个图的左侧设置一个图