#include <stdio.h> #include <stdlib.h> #define MAX_STUDENT_NUM 20 typedef struct { char Name[20]; char G; char Num[20]; int Mp; float score[4]; } stu; void input(); int main() { input(); return 0; } void input() { int i; stu s[MAX_STUDENT_NUM]; for (i = 0; i < MAX_STUDENT_NUM; i++) { printf("请输入学生的信息:姓名,性别M/W,学号,电话号码,语文分数,数学分数,英语分数\n"); scanf("%s %c %s %d %f %f %f", s[i].Name, &s[i].G, s[i].Num, &s[i].Mp, &s[i].score[0], &s[i].score[1], &s[i].score[2]); s[i].score[3] = s[i].score[0] + s[i].score[1] + s[i].score[2]; } FILE* fp; if ((fp = fopen("d:\\stud.dat", "wb")) == NULL) { printf("文件打开失败!\n"); return; } fwrite(s, sizeof(stu), MAX_STUDENT_NUM, fp); fclose(fp); printf("\n\n保存成功"); }改正
时间: 2024-01-24 19:04:11 浏览: 144
栈和队列的基础上设计模拟停车场管理程序 停车场管理问题 #include<stdio.h> #include<stdlib.h> struct { char status; int num; int time; }a; /*命令的结构*/ typedef struct{ int num; int time; }Element; struct { Element *base; Element *top; in
以下是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENT_NUM 20
typedef struct {
char Name[20];
char G;
char Num[20];
int Mp;
float score[3]; // 由于总分可以通过三科成绩计算得出,因此只需要存储三科成绩
} stu;
void input();
int main() {
input();
return 0;
}
void input() {
int i;
stu s[MAX_STUDENT_NUM];
for (i = 0; i < MAX_STUDENT_NUM; i++) {
printf("请输入学生的信息:姓名,性别M/W,学号,电话号码,语文分数,数学分数,英语分数\n");
scanf("%s %c %s %d %f %f %f", s[i].Name, &s[i].G, s[i].Num, &s[i].Mp, &s[i].score[0], &s[i].score[1], &s[i].score[2]);
s[i].score[3] = s[i].score[0] + s[i].score[1] + s[i].score[2]; // 由于score数组长度为3,此处会导致越界,应修改为score[3]
}
FILE* fp;
if ((fp = fopen("d:\\stud.dat", "wb")) == NULL) {
printf("文件打开失败!\n");
return;
}
fwrite(s, sizeof(stu), MAX_STUDENT_NUM, fp);
fclose(fp);
printf("\n\n保存成功");
}
```
主要修改如下:
1. 将score数组长度修改为3,因为总分可以通过三科成绩计算得出,没有必要再存储总分。
2. 将s[i].score[3]修改为s[i].score[0] + s[i].score[1] + s[i].score[2],因为score数组长度为3,会导致越界。
3. 在文件操作中添加fclose(fp)语句,关闭文件流。
阅读全文