VC++在读取txt文本的时候,指针的位置是不断的变化的。是一点一点的向前推进的。在这个地方我们通过一个例子来分析VC++指针移动的情况,首先我们建立一个txt文本,并且在文本中输入一下面这些数据:
1 2 3 4 5 6 7
2 3 4 5 6 7 8
8 9 7 6 5 4 3
1 2 20 4 5 6 7
然后我们通过读取数据来看数据的变化,根据数字的变化来判断指针移动的情况:
源程序:
#include<iostream>
using namespace std;
int main()
{
FILE *fp=fopen("data.txt","r");
float b;
for(int i=0;i<10;i++)
{
fscanf(fp,"%f",&b);
cout<<b<<" ";
}
cout<<endl;
cout<<"此时指针位置"<<ftell(fp)<<endl;
float a;
for(int j=0;j<10;j++)
{
fscanf(fp,"%f",&a);
cout<<a<<" ";
}
cout<<endl;
cout<<"此时指针位置"<<ftell(fp)<<endl;
cout<<fseek(fp,2*sizeof(float),1)<<endl;
float c=0;
cout<<c<<endl;
fscanf(fp,"%f",&c);
cout<<c<<endl;
fclose(fp);
return 0;
}
输出结果:
1 2 3 4 5 6 7 8 2 3 4
此时指针位置21
5 6 7 8 8 9 7 6 5 4
此时指针位置43
0
0
20
Press any key to continue
根据输出的结果我们可以分析,当第一次读取文本内容的时候指针移动到第21个位置,接着当第二次从文本中读取数据的时候是从当前指针的位置进行移动,于是又往前移动了21个字节,指针位置变成了43.也就是说当我们使用fscanf的时候读取文件,指针是在往前移动的,并且当读取到该次读取的最后的时候,指针就停留在最后读取的位置,下次读取的时候回在当前的位置开始继续读取。ftell是高度我们们当前指针的位置,也是偏移位置,fseek是从什么位置让指针进行偏移。这就是这三个函数的作用