ifstream.seekg、ifstream.tellg的用法

ifstream是用于读写的C++库。
在C++中,读写是基于指针的。同样,seekg,tellg都和指针有关联。
tellg是告诉指针当前的位置。
seekg是修改指针的位置。
例程1.1:
seekg(地址)

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
	ifstream in("in.txt");
	string line;
	streampos pos = in.tellg();//记录当前指针位置
	int i = 10;
	while (i--) {//读到第11行之前
		getline(in, line);
        cout<<line<<endl;
	}
	in.seekg(pos);//将指针指回第1行,可以重新读一次
    i=10;
    while (i--) {//读到第11行之前
		getline(in, line);
        cout<<line<<endl;
	}

	return 0;
}

以下是in.txt的内容。

yi
er
san
si
wu
liu
qi
ba
jiu
shi
shiyi

上文会输出两遍yi到shi,没有shiyi。
例程1.2

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
	ifstream in("in.txt");
	string line;
	streampos pos = in.tellg();//记录当前指针位置
	int i = 10;
	while (i--) {//读到第11行之前
		getline(in, line);
        cout<<line<<endl;
	}
	in.seekg(pos);//将指针指回第1行,可以重新读一次
    i=10;
    while (i--) {//读到第11行之前
		getline(in, line);
        cout<<line<<endl;
	}
	in.seekg(7);//将指针指回第1行,可以重新读一次
    i=10;
	
    while (i>6) {//读到第11行之前
		getline(in, line);
        cout<<line<<endl;
		i=i-1;
	}

	return 0;
}

这段代码为扩展代码。在上文的基础之上,第三次会额外输出
an,si,wu,liu。意味着seekg设置到了第8个字节(从0开始是7)的a处。

例程2:
seekg(偏移量,基地址)

#include <iostream>
#include <fstream>

using namespace std;
int main(){
    ifstream file;
    char c,c1,c2,c3,c5;
    file.open("in.txt");
    file.seekg(4);
    file>>c;//每次>>会输入一个字节。而且,到换行符的时候,指针会自动跳到下一个。
    file>>c3;
    file>>c5;
    file.seekg(3,ios::beg);
    file>>c1;
    file.seekg(-1,ios::end);
    file>>c2;
    cout<<c<<endl;
    cout<<c3<<endl;
    cout<<c5<<endl;
    cout<<c1<<endl;
    cout<<c2<<endl;
}

上文会输出r,s,a,e,i。

参考1
参考2

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值