用结构体读写文件 并注释每行代码的作用
时间: 2023-05-31 13:03:18 浏览: 94
以下是使用结构体读写文件的示例代码,其中包含了每行代码的注释说明:
```c
#include <stdio.h>
// 定义结构体
struct student {
char name[50];
int age;
float score;
};
int main() {
int i, n;
struct student s[100];
// 打开文件并写入结构体数据
FILE *fp;
fp = fopen("student.txt", "w");
fprintf(fp, "姓名 年龄 分数\n");
fprintf(fp, "Tom 18 89.5\n");
fprintf(fp, "Jerry 17 76.5\n");
fprintf(fp, "Mary 19 93.0\n");
fclose(fp);
// 读取文件中的数据到结构体数组中
fp = fopen("student.txt", "r");
fscanf(fp, "%*s%*s%*s"); // 跳过表头
n = 0; // 记录结构体数组中元素的个数
while (!feof(fp)) {
fscanf(fp, "%s %d %f", s[n].name, &s[n].age, &s[n].score);
n++;
}
fclose(fp);
// 输出结构体数组中的数据
for (i = 0; i < n; i++) {
printf("姓名:%s,年龄:%d,分数:%.1f\n", s[i].name, s[i].age, s[i].score);
}
return 0;
}
```
代码中的注释说明如下:
- `struct student {...}`:定义了一个结构体,其中包含了学生姓名、年龄和分数三个属性。
- `int i, n;`:定义了两个变量,`i` 用于循环遍历结构体数组,`n` 用于记录结构体数组中元素的个数。
- `struct student s[100];`:定义了一个结构体数组,用于存放从文件中读入的学生信息。
- `FILE *fp;`:定义了一个文件指针,用于打开和关闭文件。
- `fp = fopen("student.txt", "w");`:打开文件 `"student.txt"`,并以写入的方式打开。
- `fprintf(fp, "姓名 年龄 分数\n");`:向文件中写入表头信息。
- `fprintf(fp, "Tom 18 89.5\n");`、`fprintf(fp, "Jerry 17 76.5\n");`、`fprintf(fp, "Mary 19 93.0\n");`:向文件中写入学生信息。
- `fclose(fp);`:关闭文件。
- `fp = fopen("student.txt", "r");`:打开文件 `"student.txt"`,并以读取的方式打开。
- `fscanf(fp, "%*s%*s%*s");`:读取文件中的表头信息,并忽略掉。
- `n = 0;`:将结构体数组中元素的个数初始化为 0。
- `while (!feof(fp)) {...}`:当文件未读取到结尾时,循环读取文件中的学生信息,并存放到结构体数组中。
- `fscanf(fp, "%s %d %f", s[n].name, &s[n].age, &s[n].score);`:读取文件中的一行学生信息,并分别存放到结构体数组中对应的属性中。
- `n++;`:将结构体数组中元素的个数加 1。
- `fclose(fp);`:关闭文件。
- `for (i = 0; i < n; i++) {...}`:循环遍历结构体数组,输出每个学生的信息。
- `printf("姓名:%s,年龄:%d,分数:%.1f\n", s[i].name, s[i].age, s[i].score);`:输出每个学生的姓名、年龄和分数信息。
阅读全文