各位C语言的高手们,小弟我今天遇到一个fseek函数,不知道他在一下程序的含义是什么,还望各位不吝赐教啊

#include<stdio.h>
#include<stdlib.h>
#define Size 10
struct student
{
char name[10];
int num;
int age;
char addr[15];
}stu[Size];
int main()
{
int i;
FILE *fp;
if((fp=fopen("student.txt","rb"))==NULL)
{
printf("Can't open the file!\n" );
exit (0);
}
for(i=0;i<Size;i+=2)
{
fseek(fp,i*sizeof(struct student),0); /*这句话在此程序里面的作用是什么啊?*/
fread(&stu[i],sizeof(struct student),1,fp);
printf("%-10s %4d %4d %-15s\n",stu[i].name,stu[i].num,stu[i].age,stu[i].addr);
}
fclose(fp);
system("pause");
return 0;
}

fseek 用于二进制方式打开的文件,移动文件读写指针位置.
通常文件打开后,读写位置按先后顺序.但有时你想变动读写位置,例如重新从某处起,再读一次.

fseek有3个参数,函数原型:
int fseek( FILE *stream, long offset, int origin );
第一个是文件流,第3个是指针零点位置,第2个是把指针移动到的地点.
第3个参数取值等于下列3个之1
SEEK_CUR -- 1 为当前指针位置
SEEK_END -- 2 为文件尾
SEEK_SET -- 0 为文件起始
第2个参数为偏移量,字节数,长整型.

fseek(fp,i*sizeof(struct student),0); 把文件指针从文件头移动,i个结构体长度追问

那上面的那个Fseek函数是不是改变了文件的读写位置,然后后面的fread函数就从改变了的文件位置中读取数据啊????

追答

当i=0,文件指针还在文件开头,fread函数读取第一结构体中的数据
当i=1,文件指针从文件开头移动下一结构体,fread函数读取第二个结构体中的数据

可以那么理解

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-22
你的文件保存的是一个student结构体
fseek(fp,i*sizeof(struct student),0);
是从文件头每次移动一个结构体长度,然后去取下一个结构体数据
大家正在搜