字体
第(5/6)页
关灯
   存书签 书架管理 返回目录
%s\t%5d  %7d      %s\n",qq->ncom,qq->num, qq->age,

    qq->addr);

    fclose(fp);

    }

    与例 10.6 相比,本程序中 fscanf 和 fprintf 函数每次只能读写一个结构数组元素,因

    此采用了循环语句来读写全部数组元素。还要注意指针变量 pp,qq 由于循环改变了它们的值,

    因此在程序的 25 和 32 行分别对它们重新赋予了数组的首地址。

    13.5 文件的随机读写

    前面介绍的对文件的读写方式都是顺序读写,即读写文件只能从头开始,顺序读写各个

    数据。 但在实际问题中常要求只读写文件中某一指定的部分。为了解决这个问题可移动文件

    内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写。

    实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。

    13.5.1 文件定位

    移动文件内部位置指针的函数主要有两个,即 rewind 函数和 fseek 函数。

    rewind 函数前面已多次使用过,其调用形式为:

    rewind(文件指针);

    它的功能是把文件内部的位置指针移到文件首。

    下面主要介绍 fseek 函数。

    fseek 函数用来移动文件内部位置指针,其调用形式为:

    fseek(文件指针,位移量,起始点);

    其中:

    “文件指针”指向被移动的文件。

    “位移量”表示移动的字节数,要求位移量是 long 型数据,以便在文件长度大于 64KB 时不

    会出错。当用常量表示位移量时,要求加后缀“L”。

    “起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。

    其表示方法如下表。

    例如:

    起始点

    文件首

    当前位置

    文件末尾

    表示符号

    SEEK_SET

    SEEK_CUR

    SEEK_END

    数字表示

    0

    1

    2

    fseek(fp,100L,0);

    其意义是把位置指针移到离文件首 100 个字节处。

    还要说明的是 fseek 函数一般用于二进制文件。在文本文件中由于要进行转换,故往往

    计算的位置会出现错误。

    13.5.2 文件的随机读写

    在移动位置指针之后,即可用前面介绍的任一种读写函数进行读写。由于一般是读写一

    个数据据块,因此常用 fread 和 fwrite 函数。

    下面用例题来说明文件的随机读写。

    【例 13.8】在学生文件 stu_list 中读出第二个学生的数据。

    #include

    struct stu

    {

    char ncom[10];

    int num;

    int age;

    char addr[15];

    }boy,*qq;

    main()

    {

    
上一页 目录 下一页