使用 fseek 打印任意记录

Use fseek to print any arbitrary record

如何使用 fseek 查找任意记录并打印该记录?特别是第三条记录。
文件格式:

first name
last name
gpa

我的代码(假设文件已经存在):

typedef struct
{
    char first [20], last[20];
    double gpa;
} Student;

int main ()
{
    Student student;
    FILE* file = fopen ("gpa.dat", "r+");

    fseek(file, sizeof(Student), SEEK_END);
    fread(&student, sizeof(student), 1, file);

    printf("Name: %s %s\nGPA: %lf\n", student.first, student.last, student.gpa);

    fclose(file);
    return 0;
}

所以如果第三条记录是

xxx
yyy
3.56

这就是我要打印的内容

如果您正在读取二进制文件,您应该在打开模式下使用 b 修饰符。

要获取任意记录,请将 sizeof(Student) 乘以从零开始的记录编号。并使用SEEK_SET从文件开头算起。

int main ()
{
    Student student;
    FILE* file = fopen ("gpa.dat", "rb+");
    int record_num = 3;

    fseek(file, record_num * sizeof(Student), SEEK_SET);
    fread(&student, sizeof(student), 1, file);

    printf("Name: %s %s\nGPA: %lf\n", student.first, student.last, student.gpa);

    fclose(file);
    return 0;
}