题为c程序设计(第五版)谭浩强 课后习题第10章第5题
前言
上一篇文章中,我们主要介绍了c语言中有关链表的一系列重要操作,接下来,我将带领大家一起学习c语言的另外一个重要部分,那就是文件操作!
C语言中的文件操作是一项重要的编程技术,它允许我们读取、写入和管理计算机上的文件。通过文件操作,我们可以实现数据的存储、读取和共享,以及处理日志和配置文件等任务。在接下来的内容中,我们将深入研究文件操作函数和技巧,以帮助您更好地处理文件操作,并有效地开发各种应用程序。
一、题目复现
二、实现步骤
1.思路分析
1. 定义结构体:
- 使用`struct Student`定义了一个包含学生信息的结构体。每个学生具有学号、姓名、3门课成绩和平均成绩的数据成员。
2. 主函数逻辑:
- 声明了一个包含5个学生的数组`students`,用于存储学生数据。
- 通过`scanf`函数从键盘输入每个学生的学号、姓名和3门课成绩。输入的数据通过循环逐个存储到对应的结构体成员中。
- 使用循环计算每个学生的平均成绩,并将结果存储在结构体的`average`成员中。
- 打开名为"stud"的文件,并进行错误检查。如果无法打开文件,则输出错误消息并终止程序。
- 使用循环将学生数据以特定格式写入文件。在写入过程中,使用`fprintf`函数,并检查返回值,如果返回值小于0,则表示写入文件时发生了错误,输出错误消息并终止程序。
- 关闭文件。
- 再次打开文件进行验证,并进行错误检查。如果无法打开文件,则输出错误消息并终止程序。
- 使用循环从文件中读取学生数据,并以特定格式输出到控制台进行验证。
3. 错误处理:
- 在从键盘输入学生数据时,使用`scanf`函数的返回值判断是否成功读取了5个数据项。如果返回值不等于5,表示输入错误,输出错误消息并终止程序。
- 在将数据写入文件时,使用`fprintf`函数的返回值判断是否成功写入文件。如果返回值小于0,表示写入文件时发生了错误,输出错误消息并终止程序。
- 在验证文件内容时,使用文件打开操作和`fscanf`函数的返回值判断文件是否成功打开和读取数据。如果无法打开文件,则输出错误消息并终止程序。
最终实现了从键盘输入学生数据,计算平均成绩,并将数据写入文件。然后,再从文件中读取数据进行验证。通过添加错误处理机制,可以检测和处理可能发生的错误情况,提高代码的健壮性和可靠性。
2.具体实现
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct Student {
int id;
char name[20];
float scores[3];
float average;
};
int main() {
struct Student students[5];
// 从键盘输入学生数据
printf("请输入5名学生的学号、姓名和3门课成绩:\n");
for (int i = 0; i < 5; i++) {
printf("学生%d:\n", i + 1);
if (scanf("%d %s %f %f %f", &students[i].id, students[i].name,
&students[i].scores[0], &students[i].scores[1], &students[i].scores[2]) != 5) {
printf("输入错误,请重新输入学生数据。\n");
return 1;
}
// 计算平均成绩
students[i].average = (students[i].scores[0] + students[i].scores[1] + students[i].scores[2]) / 3.0;
}
// 将数据写入文件
FILE* file = fopen("stud", "w");
if (file == NULL) {
printf("无法打开文件。\n");
return 1;
}
for (int i = 0; i < 5; i++) {
if (fprintf(file, "%d %s %.1f %.1f %.1f %.1f\n", students[i].id, students[i].name,
students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average) < 0) {
printf("写入文件时发生错误。\n");
fclose(file);
return 1;
}
}
fclose(file);
// 验证文件内容
file = fopen("stud", "r");
if (file == NULL) {
printf("无法打开文件。\n");
return 1;
}
printf("\n验证 stud 文件中的内容:\n");
int id;
char name[20];
float score1, score2, score3, average;
while (fscanf(file, "%d %s %f %f %f %f", &id, name, &score1, &score2, &score3, &average) != EOF) {
printf("学号:%d\n姓名:%s\n成绩1:%.1f\n成绩2:%.1f\n成绩3:%.1f\n平均成绩:%.1f\n\n",
id, name, score1, score2, score3, average);
}
fclose(file);
return 0;
}
实验结果(示例):
总结
在这个习题的解决方案中,我使用了C语言的文件操作技术,实现了从键盘输入学生数据、计算平均成绩,并将数据存储到磁盘文件中的功能。代码中包含了错误处理机制,用于检测和处理可能的错误情况,提高程序的稳健性和可靠性。
通过这个习题,我们不仅掌握了文件操作函数的使用方法,还学会了如何读写文件和验证文件内容。这个练习对于加深对C语言文件操作的理解以及提升编程技能都非常有帮助。(尤其是错误处理机制,可以反复的学习和钻研)。