#include <stdio.h> #include <string.h> #include <stdlib.h> // 定义结构体类型 struct Student { char id[10]; // 学号 char name[20]; // 姓名 char gender[10]; // 性别 int chinese; // 语文成绩 int math; // 数学成绩 int english; // 英语成绩 }; // 初始化几个学生的基本信息 struct Student students[] = { {"1001", "张三", "Male", 80, 90, 85}, {"1002", "李四", "Female", 75, 85, 90}, {"1003", "王五", "Male", 90, 80, 95}, {"1004", "赵六", "Female", 85, 95, 80}, {"1005", "钱七", "Male", 95, 85, 90} }; int count=5; // 学生数量// 从键盘上输入学生信息,增添一个学生的信息 void addStudent() { // 判断学生数量是否已达到数组容量上限 if (count >= sizeof(students) / sizeof(struct Student)) { printf("无法继续添加学生信息,数组已达到容量上限!\n"); return; } // 从键盘上输入新学生的信息 printf("请输入学号:"); scanf("%s", students[count].id); printf("请输入姓名:"); scanf("%s", students[count].name); printf("请输入性别:"); scanf("%s", students[count].gender); printf("请输入语文成绩:"); scanf("%d", &students[count].chinese); printf("请输入数学成绩:"); scanf("%d", &students[count].math); printf("请输入英语成绩:"); scanf("%d", &students[count].english); count++; printf("添加学生信息成功!\n"); }修改这段代码,解决学生数量已达到数组容量上限的问题
时间: 2023-07-13 20:22:51 浏览: 88
可以使用动态内存分配,将学生信息存储在一个动态分配的数组中,这样就不会受到数组容量上限的限制。修改后的代码如下:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 定义结构体类型
struct Student {
char id[10]; // 学号
char name[20]; // 姓名
char gender[10]; // 性别
int chinese; // 语文成绩
int math; // 数学成绩
int english; // 英语成绩
};
// 初始化几个学生的基本信息
struct Student *students;
int count = 0; // 学生数量
int capacity = 5; // 数组容量
// 从键盘上输入学生信息,增添一个学生的信息
void addStudent() {
// 判断学生数量是否已达到数组容量上限
if (count >= capacity) {
// 动态扩展数组容量
capacity *= 2;
students = (struct Student*) realloc(students, capacity * sizeof(struct Student));
if (students == NULL) {
printf("动态内存分配失败!\n");
exit(1);
}
}
// 从键盘上输入新学生的信息
printf("请输入学号:");
scanf("%s", students[count].id);
printf("请输入姓名:");
scanf("%s", students[count].name);
printf("请输入性别:");
scanf("%s", students[count].gender);
printf("请输入语文成绩:");
scanf("%d", &students[count].chinese);
printf("请输入数学成绩:");
scanf("%d", &students[count].math);
printf("请输入英语成绩:");
scanf("%d", &students[count].english);
count++;
printf("添加学生信息成功!\n");
}
int main() {
// 初始时分配 5 个学生的空间
students = (struct Student*) malloc(capacity * sizeof(struct Student));
if (students == NULL) {
printf("动态内存分配失败!\n");
exit(1);
}
// 初始化几个学生的信息
count = 5;
// ...
// 从键盘上输入学生信息
addStudent();
// 释放动态分配的内存
free(students);
return 0;
}
```
阅读全文