使用 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;
}
如何使用 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;
}