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; }
时间: 2024-04-02 11:34:07 浏览: 40
这是一个用于成绩录入的函数,主要包括以下几个步骤:
1. 如果课程数量为0,则需要先输入课程数量,并且输入每门课程的名字,将其存储在一个名为courses的数组中。
2. 输入学生的学号和姓名,并将其存储在一个名为stu的结构体中。
3. 循环输入每门课程的成绩,并将其存储在stu的scores数组中。
4. 将stu结构体存储在一个名为students的数组中,并将studentCount加1。
需要注意的是,上述代码中存在一些风险,比如输入的字符串可能会超出数组大小范围,导致程序崩溃。因此在实际使用时需要对输入进行一定的校验和容错处理。
相关问题
如何用devc++写代码,创建一个文件,将下面这段代码的结果写入文件,void inputt()//利用循环录入学生信息 { while(1) { printf("请输入学号:"); scanf("%s",&students[num].ID); getchar(); printf("请输入姓名:"); scanf("%s",&students[num].Name); getchar(); printf("请输入语文成绩:"); scanf("%f",&students[num].Mark1); getchar(); printf("请输入数学成绩:"); scanf("%f",&students[num].Mark2); getchar(); printf("请输入英语成绩:"); scanf("%f",&students[num].Mark3); getchar(); printf("请输入程序设计成绩:"); scanf("%f",&students[num].Mark4); //依次输入各项数据 getchar(); if(Student_SearchByIndex(students[num].ID) ==-1)//修改的位置000000 { num++; //移向下一个位置 } else { printf("学号重复,输入数据无效 !!!\n"); } printf("是否继续?(y/n)"); if (getchar()=='n') { break; } } }
可以使用以下代码实现:
```c
#include <stdio.h>
struct Student {
char ID[20];
char Name[20];
float Mark1;
float Mark2;
float Mark3;
float Mark4;
};
struct Student students[100]; // 定义一个包含100个学生的数组
int num = 0; // 学生数量
void inputt() {
while (1) {
printf("请输入学号:");
scanf("%s", &students[num].ID);
getchar();
printf("请输入姓名:");
scanf("%s", &students[num].Name);
getchar();
printf("请输入语文成绩:");
scanf("%f", &students[num].Mark1);
getchar();
printf("请输入数学成绩:");
scanf("%f", &students[num].Mark2);
getchar();
printf("请输入英语成绩:");
scanf("%f", &students[num].Mark3);
getchar();
printf("请输入程序设计成绩:");
scanf("%f", &students[num].Mark4);
getchar();
if (Student_SearchByIndex(students[num].ID) == -1) {
num++;
} else {
printf("学号重复,输入数据无效 !!!\n");
}
printf("是否继续?(y/n)");
if (getchar() == 'n') {
break;
}
getchar(); // 处理输入缓冲区中的换行符
}
}
void writeToFile() {
FILE* fp = fopen("students.txt", "w"); // 打开文件
if (fp == NULL) {
printf("无法创建文件!\n");
return;
}
fprintf(fp, "学号\t姓名\t语文\t数学\t英语\t程序设计\n");
for (int i = 0; i < num; i++) {
fprintf(fp, "%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
students[i].ID, students[i].Name,
students[i].Mark1, students[i].Mark2,
students[i].Mark3, students[i].Mark4);
}
fclose(fp); // 关闭文件
}
int main() {
inputt();
writeToFile();
printf("已将学生信息写入文件!\n");
return 0;
}
```
在 `inputt()` 函数中,我们使用了一个无限循环来反复录入学生信息,同时使用 `getchar()` 函数来处理输入缓冲区中的换行符。在录入完一组学生信息后,我们会检查该学生的学号是否已经存在于数组中,如果不存在,就将其加入数组中;如果已经存在,则提示错误信息。
在 `writeToFile()` 函数中,我们使用了标准库函数 `fopen()` 打开一个名为 "students.txt" 的文件,并使用 `fprintf()` 函数将学生信息写入文件中。最后,我们使用 `fclose()` 函数关闭文件。
在主函数中,我们首先调用 `inputt()` 函数录入学生信息,然后调用 `writeToFile()` 函数将学生信息写入文件中。最后输出一条提示信息,告知用户程序已经完成。
#include <stdio.h> #include <string.h> #define MAX_STUDENT 100 // 最大学生数 struct Student { char id[20]; // 学号 char name[20]; // 姓名 int score; // 成绩 }; // 学生信息数组 struct Student students[MAX_STUDENT]; int student_count = 0; // 成绩录入函数 void add_student() { struct Student s; printf("请输入学生学号:"); scanf("%s", s.id); printf("请输入学生姓名:"); scanf("%s", s.name); printf("请输入学生成绩:"); scanf("%d", &s.score); students[student_count++] = s; // 将新学生信息加入数组中 } // 打印成绩单函数 void print_students() { if (student_count == 0) { printf("暂无学生信息\n"); return; } printf("学号\t姓名\t成绩\n"); for (int i = 0; i < student_count; i++) { printf("%s\t%s\t%d\n", students[i].id, students[i].name, students[i].score); } }解释一下
这是一个学生信息管理系统的代码,包含以下几个部分:
- 宏定义:定义了最大学生数为 100。
- 结构体定义:包含学号、姓名和成绩三个成员变量。
- 学生信息数组:用于存储多个学生的信息,初始化时数组长度为最大学生数。
- 学生数变量:用于记录当前学生数。
- 成绩录入函数:从控制台输入新的学生信息,并将其加入到学生信息数组中。
- 打印成绩单函数:将学生信息数组中的所有学生信息按照学号、姓名、成绩的格式打印出来。
在这个代码中,可以通过调用成绩录入函数和打印成绩单函数来实现学生信息的录入和查询。可以通过修改宏定义来改变最大学生数。同时,也可以添加其他的函数来实现更多的功能,比如删除学生信息、修改学生信息等。
阅读全文