帮我改一下这段代码#include <stdio.h> #define N 4 #define OK 1 typedef struct { int no; char name[20]; int DataStructure; int C; int SUM; }student; typedef structure{ student STU[N]; int length; }STUDENT; int input(STUDENT *stu) { for(int i = 0 ; i < N ; i++) { system("cls"); printf("请输入学生信息:\n"); printf("请输入第%d个学生的学号:",n+1); scanf("%d",&(stu -> STU[i].no)); printf("请输入第%d个学生的姓名:",n+1); scanf("%c",&(stu->STU[i].name)); printf("请输入第%d个学生的DataStructure成绩",i+1); scanf("%d",&(stu->STU[i].DataStructure)); printf("请输入第%d个学生的C语言成绩",i+1); scanf("%d",&(stu->STU[i].C)); stu->STU[i].SUM = stu->STU[i].DataStructure + stu->STU[i].C; } return OK; } void main(){ int n; int i; STUDENT stu ; stu = (STUDENT *)malloc(sizeof(STUDENT)); while(n!=7){ system("cls"); printf("学生成绩管理系统:\n"); printf("****(1):信息输入(INPUT)***************************\n"); printf("****(2):总分统计(COUNT)***************************\n"); printf("****(3):按DataStructure项排序(SortDataStructure)**\n"); printf("****(4):按C项排序(SortC)**************************\n"); printf("****(5):按SUM项排序(SortSUM)**********************\n"); printf("****(6):输入C成绩,查找该成绩位置*******************\n"); printf("****(7):退出****************************************\n"); printf("****请选择输入(1-7): *************************\n"); scanf("%d",&n); switch(n){ case 1: i = input(&stu); if(i==1){ printf("成绩输入成功"); };break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: break; case 7: break; default : printf("输入不正确,请重新输入:\n"); scanf("%d",&n); break; } } }
时间: 2023-07-01 07:21:00 浏览: 88
好的,我看到这段代码有一些问题,我来帮您修改一下:
```c
#include <stdio.h>
#include <stdlib.h> // 添加头文件
#include <string.h> // 添加头文件
#define N 4
#define OK 1
typedef struct {
int no;
char name[20];
int DataStructure;
int C;
int SUM;
} student;
typedef struct {
student STU[N];
int length;
} STUDENT;
int input(STUDENT *stu) {
for(int i = 0 ; i < N ; i++) {
system("cls");
printf("请输入学生信息:\n");
printf("请输入第%d个学生的学号:", i+1); // 修改
scanf("%d", &(stu -> STU[i].no));
getchar(); // 添加,吃掉scanf中的回车符
printf("请输入第%d个学生的姓名:", i+1); // 修改
scanf("%s", stu->STU[i].name); // 修改
printf("请输入第%d个学生的DataStructure成绩", i+1);
scanf("%d", &(stu->STU[i].DataStructure));
printf("请输入第%d个学生的C语言成绩", i+1);
scanf("%d", &(stu->STU[i].C));
stu->STU[i].SUM = stu->STU[i].DataStructure + stu->STU[i].C;
}
return OK;
}
int main(){ // 修改
int n;
STUDENT *stu; // 修改
stu = (STUDENT *)malloc(sizeof(STUDENT));
while(n != 7) {
system("cls");
printf("学生成绩管理系统:\n");
printf("****(1):信息输入(INPUT)***************************\n");
printf("****(2):总分统计(COUNT)***************************\n");
printf("****(3):按DataStructure项排序(SortDataStructure)**\n");
printf("****(4):按C项排序(SortC)**************************\n");
printf("****(5):按SUM项排序(SortSUM)**********************\n");
printf("****(6):输入C成绩,查找该成绩位置*******************\n");
printf("****(7):退出****************************************\n");
printf("****请选择输入(1-7): *************************\n");
scanf("%d", &n);
switch(n) {
case 1:
input(stu);
printf("成绩输入成功");
break;
case 2: break;
case 3: break;
case 4: break;
case 5: break;
case 6: break;
case 7: break;
default :
printf("输入不正确,请重新输入:\n");
scanf("%d",&n);
break;
}
}
free(stu); // 添加,释放内存
return 0; // 修改
}
```
主要修改如下:
1. 添加了 `<stdlib.h>` 和 `<string.h>` 的头文件。
2. 在 `main` 函数中,将 `STUDENT stu` 改为 `STUDENT *stu`,并使用 `malloc` 动态分配内存。
3. 修改了 `input` 函数中输入姓名的方法,使用 `scanf("%s", stu->STU[i].name)`。
4. 在 `input` 函数中第一个 `scanf` 后添加了一个 `getchar()`,吃掉 `scanf` 中的回车符。
5. 在 `main` 函数中添加了释放内存的语句 `free(stu)`。
6. 在 `main` 函数中添加了 `return 0`,表示程序正常结束。
阅读全文