C语言中操作文件-随机读写数据文件(下)-学习笔记-66

引入

前面,我们知道了什么是文件位置标记,以及如何控制文件位置标记,学会了 rewind 和 fseek 这两个函数后,我们就来实现一下随机读写!

例子

输入10个学生成绩,然后存储到文件,接着读入文件,将1,3,5,7,9号学生数据输出到计算机上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)
int main(){
struct Student{
int num;
char name[10];
float score;
}stu[10];
//输入数据
for (int i=0;i<10;i++){
scanf("%d %s %f",&stu[i].num,stu[i].name,&stu[i].score);
}
//存储数据
FILE *fp;
fp=fopen("/Users/liulin/1.txt","wb");
printf("存储的数据是:\n");
for(int i=0;i<10;i++){
fwrite(&stu[i],LEN,1,fp);
printf("第%d号%s的成绩是:%3.1f\n",stu[i].num,stu[i].name,stu[i].score);
}
fclose(fp);
//读入数据
printf("1、3、5、7、9的数据是:\n");
struct Student stu_in[10];
fp=fopen("/Users/liulin/1.txt","rb");
for(int i=0;i<10;i=i+2){
fseek(fp,i*LEN,0);
fread(&stu_in[i],LEN,1,fp);
printf("第%d号%s的成绩是:%3.1f\n",stu_in[i].num,stu_in[i].name,stu_in[i].score);
}
fclose(fp);
return 0;
}

输入:

1002 liulin 93.9
1003 liulin 94.9
1004 liulin 97.9
1005 liulin 98.9
1006 liulin 93.9
1007 liulin 92.9
1008 liulin 94.9
1009 liulin 95.9
10010 liulin 91.9

输出:

存储的数据是:
第1001号liulin的成绩是:99.9
第1002号liulin的成绩是:93.9
第1003号liulin的成绩是:94.9
第1004号liulin的成绩是:97.9
第1005号liulin的成绩是:98.9
第1006号liulin的成绩是:93.9
第1007号liulin的成绩是:92.9
第1008号liulin的成绩是:94.9
第1009号liulin的成绩是:95.9
第10010号liulin的成绩是:91.9
1、3、5、7、9的数据是:
第1001号liulin的成绩是:99.9
第1003号liulin的成绩是:94.9
第1005号liulin的成绩是:98.9
第1007号liulin的成绩是:92.9
第1009号liulin的成绩是:95.9

解析

这两句一定要搞清楚

1
2
fseek(fp,i*LEN,0);
fread(&stu_in[i],LEN,1,fp);

第一句是从0即从文件头开始,向后移动 i 个 LEN 的长度,即移动了文件标记位置。
第二句是,从当前这个位置,读入 LEN 个长度的数据。

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!