#include <stdio.h>
#include <stdlib.h>
#define NUM_STUDENTS 5
#define NUM_COURSES 3
typedef struct {
int student_number;
char name[20];
float courses[NUM_COURSES];
float average;
} Student;
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage: %s file_name\n", argv[0]);
return 1;
}
char *file_name = argv[1];
Student students[NUM_STUDENTS];
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("Enter student number: ");
scanf("%d", &students[i].student_number);
printf("Enter name: ");
scanf("%s", students[i].name);
for (int j = 0; j < NUM_COURSES; j++) {
printf("Enter course %d score: ", j + 1);
scanf("%f", &students[i].courses[j]);
}
students[i].average = (students[i].courses[0] + students[i].courses[1] + students[i].courses[2]) / NUM_COURSES;
}
FILE *fp = fopen(file_name, "wb");
if (fp == NULL) {
perror("Error opening file");
return 1;
}
for (int i = 0; i < NUM_STUDENTS; i++) {
fwrite(&students[i], sizeof(Student), 1, fp);
}
fclose(fp);
return 0;
}
嗯,输出结果就是比较不成功。嗯,想要大家再帮我看看代码
C语言文件操作编程问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- a5156520 2022-12-25 11:47关注
输出没问题,只要把平均成绩保留两位后在保存即可,另外可以用fread()函数再次读取文件并打印,以验证写入的数据是否正确,修改如下:
参考链接:#include <stdio.h> #include <stdlib.h> #define NUM_STUDENTS 5 #define NUM_COURSES 3 typedef struct { int student_number; char name[20]; float courses[NUM_COURSES]; float average; } Student; int main(int argc, char *argv[]) { if (argc != 2) { printf("Usage: %s file_name\n", argv[0]); return 1; } char *file_name = argv[1]; Student students[NUM_STUDENTS]; double avg; char temp[20]; for (int i = 0; i < NUM_STUDENTS; i++) { printf("Enter student number: "); scanf("%d", &students[i].student_number); printf("Enter name: "); scanf("%s", students[i].name); for (int j = 0; j < NUM_COURSES; j++) { printf("Enter course %d score: ", j + 1); scanf("%f", &students[i].courses[j]); } avg= (students[i].courses[0] + students[i].courses[1] + students[i].courses[2]) / NUM_COURSES; // https://baike.baidu.com/link?url=_FbRjX1l4bRnFF8hQoqlw9-2HhQr4LDM-23DwSSLil86L0OO-bz5NDL5ljll4dgf47xbtOgMOF1Ny5MCFw67d0BOAsOgb2hbg1VpKI6WcsO sprintf(temp,"%.2f",avg); // 平均成绩保留两位小数 保存为字符串 // https://www.runoob.com/cprogramming/c-function-atof.html students[i].average = (float)(atof(temp)); // 把保留两位小数的字符串转为浮点数 } FILE *fp = fopen(file_name, "wb"); if (fp == NULL) { perror("Error opening file"); return 1; } for (int i = 0; i < NUM_STUDENTS; i++) { fwrite(&students[i], sizeof(Student), 1, fp); } fclose(fp); // 读取文件验证写入的数据是否正确 fp = fopen(file_name, "r"); if (fp == NULL) { perror("Error opening file"); return 1; } Student rstudents[NUM_STUDENTS]; printf("\n"); for (int i = 0; i < NUM_STUDENTS; i++) { fread(&rstudents[i], sizeof(Student), 1, fp); } for (int i = 0; i < NUM_STUDENTS; i++) { printf("%d %s %f %f %f %f\n",rstudents[i].student_number,rstudents[i].name, rstudents[i].courses[0],rstudents[i].courses[1],rstudents[i].courses[2],rstudents[i].average); } fclose(fp); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 2024-五一综合模拟赛
- ¥15 下图接收小电路,谁知道原理
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题
- ¥15 matlab中使用gurobi时报错
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭