printf("请输入第 %d 门课程名字:", i+1); scanf("%s", course.name); courses[i] = course; }
时间: 2024-04-02 21:34:04 浏览: 6
这段代码是用于输入每门课程的名字,并将其存储在名为courses的数组中。
其中,%d和%d+1用于输出当前正在输入的是第几门课程的名字。
%s和course.name用于输入和存储课程名字的字符串。
最后,将course结构体存储在courses数组中,以便后续使用。
需要注意的是,这里没有对输入的字符串长度进行限制,可能会导致输入的字符串太长,超出数组大小范围,从而影响程序的稳定性。因此,在实际使用时,应该对输入的字符串进行一定的校验和容错处理。
相关问题
void inputScores() //成绩录入 { if (courseCount == 0) { printf("请输入课程数量:"); scanf("%d", &courseCount); //输入课程数量 for (int i = 0; i < courseCount; i++) //输入课程名字 { Course course; printf("请输入第 %d 门课程名字:", i+1); scanf("%s", course.name); courses[i] = course; } } Student stu; printf("请输入学生学号:"); scanf("%s", stu.id); //输入学生学号 printf("请输入学生名字:"); scanf("%s", stu.name); //输入学生姓名 for (int j = 0; j < courseCount; j++) //输入课程成绩 { printf("请输入 %s 课程成绩:", courses[j].name); scanf("%d", &stu.scores[j]); } students[studentCount++] = stu; }
这是一个用于成绩录入的函数,主要包括以下几个步骤:
1. 如果课程数量为0,则需要先输入课程数量,并且输入每门课程的名字,将其存储在一个名为courses的数组中。
2. 输入学生的学号和姓名,并将其存储在一个名为stu的结构体中。
3. 循环输入每门课程的成绩,并将其存储在stu的scores数组中。
4. 将stu结构体存储在一个名为students的数组中,并将studentCount加1。
需要注意的是,上述代码中存在一些风险,比如输入的字符串可能会超出数组大小范围,导致程序崩溃。因此在实际使用时需要对输入进行一定的校验和容错处理。
void basicSettings(struct Student* student, struct Course courses[], int* numCourses) { int choose; printf("\n--------基本设置--------\n"); printf("\n--------1.添加学生信息--------\n"); printf("\n--------2.添加老师信息--------\n"); printf("\n--------3.修改密码--------\n"); printf("\n--------4.返回--------\n"); printf("请输入您的选择:\n"); scanf("%d", &choose); if(choose==1){ printf("\n"); printf("请输入班级:"); scanf("%s", student->className); printf("请输入学号:"); scanf("%s", student->id); printf("请输入姓名:"); scanf("%s", student->name); } if(choose==2) { printf("\n"); printf("请输入课程数:"); scanf("%d", numCourses); printf("请输入每门课程的名称和教师名字:\n"); for (int i = 0; i < *numCourses; i++) { printf("第%d门课程:", i + 1); scanf("%s %s", courses[i].name, courses[i].teacher); } } if(choose==3) { void changePassword(struct User* user) { printf("\n--------修改密码--------\n"); printf("请输入旧密码:"); char oldpassword[MAX_NAME_LEN]; scanf("%s", oldpassword); if (strcmp(oldpassword, user->password) != 0) { printf("密码错误,修改失败!\n"); return; } printf("请输入新密码:"); scanf("%s", user->password); printf("密码已修改!\n"); } changePassword(user_p); } FILE* fp = fopen("student.dat", "wb"); if (fp == NULL) { printf("无法打开文件!\n"); return; } fwrite(student, sizeof(struct Student), 1, fp); fclose(fp); fp = fopen("courses.dat", "wb"); if (fp == NULL) { printf("无法打开文件!\n"); return; } fwrite(courses, sizeof(struct Course), *numCourses, fp); fclose(fp); printf("设置已保存!\n"); } 修改代码
在函数basicSettings中,我发现有一个内嵌的函数changePassword。这个函数的定义在if(choose==3)的条件下,最好将其定义移到函数basicSettings的外面,避免出现嵌套函数的情况。同时,在函数内部,应该检查文件是否成功打开,如果打开失败,应该返回错误信息。修改后的代码如下:
```
void changePassword(struct User* user) {
printf("\n--------修改密码--------\n");
printf("请输入旧密码:");
char oldpassword[MAX_NAME_LEN];
scanf("%s", oldpassword);
if (strcmp(oldpassword, user->password) != 0) {
printf("密码错误,修改失败!\n");
return;
}
printf("请输入新密码:");
scanf("%s", user->password);
printf("密码已修改!\n");
}
void basicSettings(struct Student* student, struct Course courses[], int* numCourses) {
int choose;
printf("\n--------基本设置--------\n");
printf("\n--------1.添加学生信息--------\n");
printf("\n--------2.添加老师信息--------\n");
printf("\n--------3.修改密码--------\n");
printf("\n--------4.返回--------\n");
printf("请输入您的选择:\n");
scanf("%d", &choose);
if (choose == 1) {
printf("\n");
printf("请输入班级:");
scanf("%s", student->className);
printf("请输入学号:");
scanf("%s", student->id);
printf("请输入姓名:");
scanf("%s", student->name);
}
if (choose == 2) {
printf("\n");
printf("请输入课程数:");
scanf("%d", numCourses);
printf("请输入每门课程的名称和教师名字:\n");
for (int i = 0; i < *numCourses; i++) {
printf("第%d门课程:", i + 1);
scanf("%s %s", courses[i].name, courses[i].teacher);
}
}
if (choose == 3) {
changePassword(user_p);
}
FILE* fp = fopen("student.dat", "wb");
if (fp == NULL) {
printf("无法打开学生文件!\n");
return;
}
fwrite(student, sizeof(struct Student), 1, fp);
fclose(fp);
fp = fopen("courses.dat", "wb");
if (fp == NULL) {
printf("无法打开课程文件!\n");
return;
}
fwrite(courses, sizeof(struct Course), *numCourses, fp);
fclose(fp);
printf("设置已保存!\n");
}
```